From cd25a7690abbd3665996dc7657b13101ba032c79 Mon Sep 17 00:00:00 2001 From: Pedro Vicente Nunes 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