From cd25a7690abbd3665996dc7657b13101ba032c79 Mon Sep 17 00:00:00 2001
From: Pedro Vicente Nunes <pvn@hdfgroup.org>
Date: Tue, 28 Mar 2006 16:25:10 -0500
Subject: [svn-r12171] Purpose: bug fixes

Description:
h5dump/h5ls were not displaying long doubles correctly

Solution:
1) the print datatype functions were incorrectly testing for the valid return value from H5Tequal,
   (TRUE), causing the display of an incorrect name of a dataype in error cases from H5Tequal
2) h5tools_print_str did not have a case for native long double
3) added a file generator for a long double dataset
4) added one script test for the long double data (commented , some sytems don't have a native long double match, and the output differs)
5) added a vms file and h5dump script test


Platforms tested:
linux 32, 64
solaris
AIX

Misc. update:
---
 MANIFEST                      |   4 +-
 tools/h5dump/h5dump.c         | 153 +++++++++++++++++++++++++++++-------------
 tools/h5dump/h5dumpgentest.c  |  56 ++++++++++++++++
 tools/h5dump/testh5dump.sh.in |   5 ++
 tools/h5ls/h5ls.c             |  98 +++++++++++++--------------
 tools/lib/h5tools_str.c       |  35 ++++++----
 tools/testfiles/tldouble.h5   | Bin 0 -> 2096 bytes
 tools/testfiles/tnbit.ddl     |   2 +-
 tools/testfiles/tvms.ddl      |  18 +++++
 tools/testfiles/tvms.h5       | Bin 0 -> 2288 bytes
 10 files changed, 260 insertions(+), 111 deletions(-)
 create mode 100644 tools/testfiles/tldouble.h5
 create mode 100644 tools/testfiles/tvms.ddl
 create mode 100644 tools/testfiles/tvms.h5

diff --git a/MANIFEST b/MANIFEST
index 3930912..c076923 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1059,7 +1059,9 @@
 ./tools/testfiles/tstring2.ddl
 ./tools/testfiles/tstr3.h5
 ./tools/testfiles/taindices.h5
-
+./tools/testfiles/tvms.ddl
+./tools/testfiles/tldouble.h5
+./tools/testfiles/tvms.h5
 
 
 # Expected output from h5ls tests
diff --git a/tools/h5dump/h5dump.c b/tools/h5dump/h5dump.c
index 1e9ad28..ed6fa6d 100644
--- a/tools/h5dump/h5dump.c
+++ b/tools/h5dump/h5dump.c
@@ -655,7 +655,8 @@ usage(const char *prog)
  *
  * Programmer:  Ruey-Hsia Li
  *
- * Modifications:
+ * Modifications: pvn, March 28, 2006
+ *  print information about type when a native match is not possible
  *
  *-------------------------------------------------------------------------
  */
@@ -677,6 +678,9 @@ print_datatype(hid_t type,unsigned in_group)
     hid_t       super;
     hid_t       tmp_type;
     htri_t      is_vlstr=FALSE;
+    const char  *order_s=NULL;  /* byte order string */
+    H5T_sign_t  sign;           /* sign scheme value */
+    const char  *sign_s=NULL;   /* sign scheme string */
 
     if (!in_group && H5Tcommitted(type) > 0) {
         obj_t  *obj;    /* Found object */
@@ -696,88 +700,141 @@ print_datatype(hid_t type,unsigned in_group)
     } else {
         switch (H5Tget_class(type)) {
         case H5T_INTEGER:
-            if (H5Tequal(type, H5T_STD_I8BE)) {
+            if (H5Tequal(type, H5T_STD_I8BE)==TRUE) {
                 printf("H5T_STD_I8BE");
-            } else if (H5Tequal(type, H5T_STD_I8LE)) {
+            } else if (H5Tequal(type, H5T_STD_I8LE)==TRUE) {
                 printf("H5T_STD_I8LE");
-            } else if (H5Tequal(type, H5T_STD_I16BE)) {
+            } else if (H5Tequal(type, H5T_STD_I16BE)==TRUE) {
                 printf("H5T_STD_I16BE");
-            } else if (H5Tequal(type, H5T_STD_I16LE)) {
+            } else if (H5Tequal(type, H5T_STD_I16LE)==TRUE) {
                 printf("H5T_STD_I16LE");
-            } else if (H5Tequal(type, H5T_STD_I32BE)) {
+            } else if (H5Tequal(type, H5T_STD_I32BE)==TRUE) {
                 printf("H5T_STD_I32BE");
-            } else if (H5Tequal(type, H5T_STD_I32LE)) {
+            } else if (H5Tequal(type, H5T_STD_I32LE)==TRUE) {
                 printf("H5T_STD_I32LE");
-            } else if (H5Tequal(type, H5T_STD_I64BE)) {
+            } else if (H5Tequal(type, H5T_STD_I64BE)==TRUE) {
                 printf("H5T_STD_I64BE");
-            } else if (H5Tequal(type, H5T_STD_I64LE)) {
+            } else if (H5Tequal(type, H5T_STD_I64LE)==TRUE) {
                 printf("H5T_STD_I64LE");
-            } else if (H5Tequal(type, H5T_STD_U8BE)) {
+            } else if (H5Tequal(type, H5T_STD_U8BE)==TRUE) {
                 printf("H5T_STD_U8BE");
-            } else if (H5Tequal(type, H5T_STD_U8LE)) {
+            } else if (H5Tequal(type, H5T_STD_U8LE)==TRUE) {
                 printf("H5T_STD_U8LE");
-            } else if (H5Tequal(type, H5T_STD_U16BE)) {
+            } else if (H5Tequal(type, H5T_STD_U16BE)==TRUE) {
                 printf("H5T_STD_U16BE");
-            } else if (H5Tequal(type, H5T_STD_U16LE)) {
+            } else if (H5Tequal(type, H5T_STD_U16LE)==TRUE) {
                 printf("H5T_STD_U16LE");
-            } else if (H5Tequal(type, H5T_STD_U32BE)) {
+            } else if (H5Tequal(type, H5T_STD_U32BE)==TRUE) {
                 printf("H5T_STD_U32BE");
-            } else if (H5Tequal(type, H5T_STD_U32LE)) {
+            } else if (H5Tequal(type, H5T_STD_U32LE)==TRUE) {
                 printf("H5T_STD_U32LE");
-            } else if (H5Tequal(type, H5T_STD_U64BE)) {
+            } else if (H5Tequal(type, H5T_STD_U64BE)==TRUE) {
                 printf("H5T_STD_U64BE");
-            } else if (H5Tequal(type, H5T_STD_U64LE)) {
+            } else if (H5Tequal(type, H5T_STD_U64LE)==TRUE) {
                 printf("H5T_STD_U64LE");
-            } else if (H5Tequal(type, H5T_NATIVE_SCHAR)) {
+            } else if (H5Tequal(type, H5T_NATIVE_SCHAR)==TRUE) {
                 printf("H5T_NATIVE_SCHAR");
-            } else if (H5Tequal(type, H5T_NATIVE_UCHAR)) {
+            } else if (H5Tequal(type, H5T_NATIVE_UCHAR)==TRUE) {
                 printf("H5T_NATIVE_UCHAR");
-            } else if (H5Tequal(type, H5T_NATIVE_SHORT)) {
+            } else if (H5Tequal(type, H5T_NATIVE_SHORT)==TRUE) {
                 printf("H5T_NATIVE_SHORT");
-            } else if (H5Tequal(type, H5T_NATIVE_USHORT)) {
+            } else if (H5Tequal(type, H5T_NATIVE_USHORT)==TRUE) {
                 printf("H5T_NATIVE_USHORT");
-            } else if (H5Tequal(type, H5T_NATIVE_INT)) {
+            } else if (H5Tequal(type, H5T_NATIVE_INT)==TRUE) {
                 printf("H5T_NATIVE_INT");
-            } else if (H5Tequal(type, H5T_NATIVE_UINT)) {
+            } else if (H5Tequal(type, H5T_NATIVE_UINT)==TRUE) {
                 printf("H5T_NATIVE_UINT");
-            } else if (H5Tequal(type, H5T_NATIVE_LONG)) {
+            } else if (H5Tequal(type, H5T_NATIVE_LONG)==TRUE) {
                 printf("H5T_NATIVE_LONG");
-            } else if (H5Tequal(type, H5T_NATIVE_ULONG)) {
+            } else if (H5Tequal(type, H5T_NATIVE_ULONG)==TRUE) {
                 printf("H5T_NATIVE_ULONG");
-            } else if (H5Tequal(type, H5T_NATIVE_LLONG)) {
+            } else if (H5Tequal(type, H5T_NATIVE_LLONG)==TRUE) {
                 printf("H5T_NATIVE_LLONG");
-            } else if (H5Tequal(type, H5T_NATIVE_ULLONG)) {
+            } else if (H5Tequal(type, H5T_NATIVE_ULLONG)==TRUE) {
                 printf("H5T_NATIVE_ULLONG");
             } else {
-                printf("undefined integer");
-                d_status = EXIT_FAILURE;
+                
+             /* 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  */
+             printf("%lu-bit%s%s integer",
+              (unsigned long)(8*H5Tget_size(type)), order_s, sign_s);
             }
             break;
 
         case H5T_FLOAT:
-            if (H5Tequal(type, H5T_IEEE_F32BE)) {
+            if (H5Tequal(type, H5T_IEEE_F32BE)==TRUE) {
                 printf("H5T_IEEE_F32BE");
-            } else if (H5Tequal(type, H5T_IEEE_F32LE)) {
+            } else if (H5Tequal(type, H5T_IEEE_F32LE)==TRUE) {
                 printf("H5T_IEEE_F32LE");
-            } else if (H5Tequal(type, H5T_IEEE_F64BE)) {
+            } else if (H5Tequal(type, H5T_IEEE_F64BE)==TRUE) {
                 printf("H5T_IEEE_F64BE");
-            } else if (H5Tequal(type, H5T_IEEE_F64LE)) {
+            } else if (H5Tequal(type, H5T_IEEE_F64LE)==TRUE) {
                 printf("H5T_IEEE_F64LE");
-            } else if (H5Tequal(type, H5T_VAX_F32)) {
+            } else if (H5Tequal(type, H5T_VAX_F32)==TRUE) {
                 printf("H5T_VAX_F32");
-            } else if (H5Tequal(type, H5T_VAX_F64)) {
+            } else if (H5Tequal(type, H5T_VAX_F64)==TRUE) {
                 printf("H5T_VAX_F64");
-            } else if (H5Tequal(type, H5T_NATIVE_FLOAT)) {
+            } else if (H5Tequal(type, H5T_NATIVE_FLOAT)==TRUE) {
                 printf("H5T_NATIVE_FLOAT");
-            } else if (H5Tequal(type, H5T_NATIVE_DOUBLE)) {
+            } else if (H5Tequal(type, H5T_NATIVE_DOUBLE)==TRUE) {
                 printf("H5T_NATIVE_DOUBLE");
 #if H5_SIZEOF_LONG_DOUBLE !=0
-            } else if (H5Tequal(type, H5T_NATIVE_LDOUBLE)) {
+            } else if (H5Tequal(type, H5T_NATIVE_LDOUBLE)==TRUE) {
                 printf("H5T_NATIVE_LDOUBLE");
 #endif
             } else {
-                printf("undefined float");
-                d_status = EXIT_FAILURE;
+                
+             /* 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 */
+             printf("%lu-bit%s floating-point",
+              (unsigned long)(8*H5Tget_size(type)), order_s);
+
             }
             break;
 
@@ -891,21 +948,21 @@ done:
             break;
 
         case H5T_BITFIELD:
-            if (H5Tequal(type, H5T_STD_B8BE)) {
+            if (H5Tequal(type, H5T_STD_B8BE)==TRUE) {
                 printf("H5T_STD_B8BE");
-            } else if (H5Tequal(type, H5T_STD_B8LE)) {
+            } else if (H5Tequal(type, H5T_STD_B8LE)==TRUE) {
                 printf("H5T_STD_B8LE");
-            } else if (H5Tequal(type, H5T_STD_B16BE)) {
+            } else if (H5Tequal(type, H5T_STD_B16BE)==TRUE) {
                 printf("H5T_STD_B16BE");
-            } else if (H5Tequal(type, H5T_STD_B16LE)) {
+            } else if (H5Tequal(type, H5T_STD_B16LE)==TRUE) {
                 printf("H5T_STD_B16LE");
-            } else if (H5Tequal(type, H5T_STD_B32BE)) {
+            } else if (H5Tequal(type, H5T_STD_B32BE)==TRUE) {
                 printf("H5T_STD_B32BE");
-            } else if (H5Tequal(type, H5T_STD_B32LE)) {
+            } else if (H5Tequal(type, H5T_STD_B32LE)==TRUE) {
                 printf("H5T_STD_B32LE");
-            } else if (H5Tequal(type, H5T_STD_B64BE)) {
+            } else if (H5Tequal(type, H5T_STD_B64BE)==TRUE) {
                 printf("H5T_STD_B64BE");
-            } else if (H5Tequal(type, H5T_STD_B64LE)) {
+            } else if (H5Tequal(type, H5T_STD_B64LE)==TRUE) {
                 printf("H5T_STD_B64LE");
             } else {
                 printf("undefined bitfield");
diff --git a/tools/h5dump/h5dumpgentest.c b/tools/h5dump/h5dumpgentest.c
index 20ab958..e7bf7a7 100644
--- a/tools/h5dump/h5dumpgentest.c
+++ b/tools/h5dump/h5dumpgentest.c
@@ -78,6 +78,8 @@
 #define FILE49  "tstr3.h5"
 #define FILE50  "taindices.h5"
 #define FILE51  "tlonglinks.h5"
+#define FILE52  "tldouble.h5"
+
 
 
 
@@ -5415,6 +5417,59 @@ static void gent_longlinks(void)
 }
 
 
+
+/*-------------------------------------------------------------------------
+ * Function: gent_ldouble
+ *
+ * Purpose: make file with a long double dataset
+ *
+ *-------------------------------------------------------------------------
+ */
+static int gent_ldouble(void)
+{
+ hid_t       fid;        
+ hid_t       did;
+ hid_t       tid;
+ hid_t       sid;
+ size_t      size;
+ hsize_t     dims[1] = {3};             
+ long double buf[3] = {1,2,3};
+  
+ if ((fid = H5Fcreate(FILE52, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0)
+  goto error;
+ 
+ if ((sid = H5Screate_simple(1, dims, NULL))<0)
+  goto error;
+ 
+ if ((tid = H5Tcopy(H5T_NATIVE_LDOUBLE))<0)
+  goto error;
+
+ if ((size = H5Tget_size(tid))<0)
+  goto error;
+
+ if ((did = H5Dcreate(fid, "dset", tid, sid, H5P_DEFAULT))<0)
+  goto error;
+
+ if (H5Dwrite(did,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
+  goto error;
+ 
+ if (H5Sclose(sid)<0)
+  goto error;
+ if (H5Tclose(tid)<0)
+  goto error;
+ if (H5Dclose(did)<0)
+  goto error;
+ if (H5Fclose(fid)<0)
+  goto error;
+ 
+ return 0;
+
+error:
+ printf("error !\n");
+ return -1;
+
+}
+
 /*-------------------------------------------------------------------------
  * Function: main
  *
@@ -5474,6 +5529,7 @@ int main(void)
     gent_string();
     gent_aindices();
     gent_longlinks();
+    gent_ldouble();
 
     return 0;
 }
diff --git a/tools/h5dump/testh5dump.sh.in b/tools/h5dump/testh5dump.sh.in
index b9d42c8..c23651b 100644
--- a/tools/h5dump/testh5dump.sh.in
+++ b/tools/h5dump/testh5dump.sh.in
@@ -314,6 +314,11 @@ TOOLTEST tnullspace.ddl tnullspace.h5
 # test for displaying objects with very long names
 TOOLTEST tlonglinks.ddl tlonglinks.h5
 
+# test for long double (some systems do not have long double)
+#TOOLTEST tldouble.ddl tldouble.h5
+
+# test for vms
+TOOLTEST tvms.ddl tvms.h5
 
 if test $nerrors -eq 0 ; then
    echo "All $DUMPER tests passed."
diff --git a/tools/h5ls/h5ls.c b/tools/h5ls/h5ls.c
index 1c1a3fb..1f73c37 100644
--- a/tools/h5ls/h5ls.c
+++ b/tools/h5ls/h5ls.c
@@ -294,97 +294,97 @@ display_string(FILE *stream, const char *s, hbool_t escape_spaces)
 static hbool_t
 display_native_type(hid_t type, int UNUSED ind)
 {
-    if (H5Tequal(type, H5T_NATIVE_SCHAR)) {
+    if (H5Tequal(type, H5T_NATIVE_SCHAR)==TRUE) {
  printf("native signed char");
-    } else if (H5Tequal(type, H5T_NATIVE_UCHAR)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UCHAR)==TRUE) {
  printf("native unsigned char");
-    } else if (H5Tequal(type, H5T_NATIVE_INT)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT)==TRUE) {
  printf("native int");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT)==TRUE) {
  printf("native unsigned int");
-    } else if (H5Tequal(type, H5T_NATIVE_SHORT)) {
+    } else if (H5Tequal(type, H5T_NATIVE_SHORT)==TRUE) {
  printf("native short");
-    } else if (H5Tequal(type, H5T_NATIVE_USHORT)) {
+    } else if (H5Tequal(type, H5T_NATIVE_USHORT)==TRUE) {
  printf("native unsigned short");
-    } else if (H5Tequal(type, H5T_NATIVE_LONG)) {
+    } else if (H5Tequal(type, H5T_NATIVE_LONG)==TRUE) {
  printf("native long");
-    } else if (H5Tequal(type, H5T_NATIVE_ULONG)) {
+    } else if (H5Tequal(type, H5T_NATIVE_ULONG)==TRUE) {
  printf("native unsigned long");
-    } else if (H5Tequal(type, H5T_NATIVE_LLONG)) {
+    } else if (H5Tequal(type, H5T_NATIVE_LLONG)==TRUE) {
  printf("native long long");
-    } else if (H5Tequal(type, H5T_NATIVE_ULLONG)) {
+    } else if (H5Tequal(type, H5T_NATIVE_ULLONG)==TRUE) {
  printf("native unsigned long long");
-    } else if (H5Tequal(type, H5T_NATIVE_FLOAT)) {
+    } else if (H5Tequal(type, H5T_NATIVE_FLOAT)==TRUE) {
  printf("native float");
-    } else if (H5Tequal(type, H5T_NATIVE_DOUBLE)) {
+    } else if (H5Tequal(type, H5T_NATIVE_DOUBLE)==TRUE) {
  printf("native double");
 #if H5_SIZEOF_LONG_DOUBLE !=0
-    } else if (H5Tequal(type, H5T_NATIVE_LDOUBLE)) {
+    } else if (H5Tequal(type, H5T_NATIVE_LDOUBLE)==TRUE) {
  printf("native long double");
 #endif
-    } else if (H5Tequal(type, H5T_NATIVE_INT8)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT8)==TRUE) {
  printf("native int8_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT8)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT8)==TRUE) {
  printf("native uint8_t");
-    } else if (H5Tequal(type, H5T_NATIVE_INT16)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT16)==TRUE) {
  printf("native int16_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT16)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT16)==TRUE) {
  printf("native uint16_t");
-    } else if (H5Tequal(type, H5T_NATIVE_INT32)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT32)==TRUE) {
  printf("native int32_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT32)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT32)==TRUE) {
  printf("native uint32_t");
-    } else if (H5Tequal(type, H5T_NATIVE_INT64)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT64)==TRUE) {
  printf("native int64_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT64)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT64)==TRUE) {
  printf("native uint64_t");
-    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST8)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST8)==TRUE) {
  printf("native int_least8_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST8)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST8)==TRUE) {
  printf("native uint_least8_t");
-    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST16)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST16)==TRUE) {
  printf("native int_least16_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST16)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST16)==TRUE) {
  printf("native uint_least16_t");
-    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST32)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST32)==TRUE) {
  printf("native int_least32_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST32)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST32)==TRUE) {
  printf("native uint_least32_t");
-    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST64)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST64)==TRUE) {
  printf("native int_least64_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST64)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST64)==TRUE) {
  printf("native uint_least64_t");
-    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST8)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST8)==TRUE) {
  printf("native int_fast8_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST8)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST8)==TRUE) {
  printf("native uint_fast8_t");
-    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST16)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST16)==TRUE) {
  printf("native int_fast16_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST16)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST16)==TRUE) {
  printf("native uint_fast16_t");
-    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST32)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST32)==TRUE) {
  printf("native int_fast32_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST32)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST32)==TRUE) {
  printf("native uint_fast32_t");
-    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST64)) {
+    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST64)==TRUE) {
  printf("native int_fast64_t");
-    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST64)) {
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST64)==TRUE) {
  printf("native uint_fast64_t");
-    } else if (H5Tequal(type, H5T_NATIVE_B8)) {
+    } else if (H5Tequal(type, H5T_NATIVE_B8)==TRUE) {
  printf("native 8-bit field");
-    } else if (H5Tequal(type, H5T_NATIVE_B16)) {
+    } else if (H5Tequal(type, H5T_NATIVE_B16)==TRUE) {
  printf("native 16-bit field");
-    } else if (H5Tequal(type, H5T_NATIVE_B32)) {
+    } else if (H5Tequal(type, H5T_NATIVE_B32)==TRUE) {
  printf("native 32-bit field");
-    } else if (H5Tequal(type, H5T_NATIVE_B64)) {
+    } else if (H5Tequal(type, H5T_NATIVE_B64)==TRUE) {
  printf("native 64-bit field");
-    } else if (H5Tequal(type, H5T_NATIVE_HSIZE)) {
+    } else if (H5Tequal(type, H5T_NATIVE_HSIZE)==TRUE) {
  printf("native hsize_t");
-    } else if (H5Tequal(type, H5T_NATIVE_HSSIZE)) {
+    } else if (H5Tequal(type, H5T_NATIVE_HSSIZE)==TRUE) {
  printf("native hssize_t");
-    } else if (H5Tequal(type, H5T_NATIVE_HERR)) {
+    } else if (H5Tequal(type, H5T_NATIVE_HERR)==TRUE) {
  printf("native herr_t");
-    } else if (H5Tequal(type, H5T_NATIVE_HBOOL)) {
+    } else if (H5Tequal(type, H5T_NATIVE_HBOOL)==TRUE) {
  printf("native hbool_t");
     } else {
  return FALSE;
@@ -412,13 +412,13 @@ display_native_type(hid_t type, int UNUSED ind)
 static hbool_t
 display_ieee_type(hid_t type, int UNUSED ind)
 {
-    if (H5Tequal(type, H5T_IEEE_F32BE)) {
+    if (H5Tequal(type, H5T_IEEE_F32BE)==TRUE) {
  printf("IEEE 32-bit big-endian float");
-    } else if (H5Tequal(type, H5T_IEEE_F32LE)) {
+    } else if (H5Tequal(type, H5T_IEEE_F32LE)==TRUE) {
  printf("IEEE 32-bit little-endian float");
-    } else if (H5Tequal(type, H5T_IEEE_F64BE)) {
+    } else if (H5Tequal(type, H5T_IEEE_F64BE)==TRUE) {
  printf("IEEE 64-bit big-endian float");
-    } else if (H5Tequal(type, H5T_IEEE_F64LE)) {
+    } else if (H5Tequal(type, H5T_IEEE_F64LE)==TRUE) {
  printf("IEEE 64-bit little-endian float");
     } else {
  return FALSE;
diff --git a/tools/lib/h5tools_str.c b/tools/lib/h5tools_str.c
index 73ca045..2286b4e 100644
--- a/tools/lib/h5tools_str.c
+++ b/tools/lib/h5tools_str.c
@@ -552,15 +552,18 @@ h5tools_print_char(h5tools_str_t *str, const h5tool_format_t *info, unsigned cha
  *		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*'.
+ *  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*'.
+ *
+ *  pvn, 28 March 2006
+ *  added H5T_NATIVE_LDOUBLE case
  *-------------------------------------------------------------------------
  */
 char *
@@ -592,6 +595,9 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
     int                tempint;
     unsigned short     tempushort;
     short              tempshort;
+#if H5_SIZEOF_LONG_DOUBLE !=0
+    long double        templdouble;
+#endif
 
     /* Build default formats for long long types */
     if (!fmt_llong[0]) {
@@ -617,9 +623,14 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
         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) ||
+     memcpy(&tempdouble, vp, sizeof(double));
+     h5tools_str_append(str, OPT(info->fmt_double, "%g"), tempdouble);
+#if H5_SIZEOF_LONG_DOUBLE !=0
+    } else if (H5Tequal(type, H5T_NATIVE_LDOUBLE)) {
+      memcpy(&templdouble, vp, sizeof(long double));
+      h5tools_str_append(str, "%Lf", templdouble);
+#endif
+     } 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)) {
diff --git a/tools/testfiles/tldouble.h5 b/tools/testfiles/tldouble.h5
new file mode 100644
index 0000000..56f673f
Binary files /dev/null and b/tools/testfiles/tldouble.h5 differ
diff --git a/tools/testfiles/tnbit.ddl b/tools/testfiles/tnbit.ddl
index 2abcc74..a8bf549 100644
--- a/tools/testfiles/tnbit.ddl
+++ b/tools/testfiles/tnbit.ddl
@@ -3,7 +3,7 @@ Expected output for 'h5dump -H -p -d nbit tfilters.h5'
 #############################
 HDF5 "tfilters.h5" {
 DATASET "nbit" {
-   DATATYPE  undefined integer
+   DATATYPE  32-bit little-endian integer
    DATASPACE  SIMPLE { ( 20, 10 ) / ( 20, 10 ) }
    STORAGE_LAYOUT {
       CHUNKED ( 10, 5 )
diff --git a/tools/testfiles/tvms.ddl b/tools/testfiles/tvms.ddl
new file mode 100644
index 0000000..359eab7
--- /dev/null
+++ b/tools/testfiles/tvms.ddl
@@ -0,0 +1,18 @@
+#############################
+Expected output for 'h5dump tvms.h5'
+#############################
+HDF5 "tvms.h5" {
+GROUP "/" {
+   DATASET "IntArray" {
+      DATATYPE  H5T_VAX_F64
+      DATASPACE  SIMPLE { ( 5, 6 ) / ( 5, 6 ) }
+      DATA {
+      (0,0): 0, 1, 2, 3, 4, 5,
+      (1,0): 1, 2, 3, 4, 5, 6,
+      (2,0): 2, 3, 4, 5, 6, 7,
+      (3,0): 3, 4, 5, 6, 7, 8,
+      (4,0): 4, 5, 6, 7, 8, 9
+      }
+   }
+}
+}
diff --git a/tools/testfiles/tvms.h5 b/tools/testfiles/tvms.h5
new file mode 100644
index 0000000..a8712ab
Binary files /dev/null and b/tools/testfiles/tvms.h5 differ
-- 
cgit v0.12