diff options
Diffstat (limited to 'tools/h5ls.c')
-rw-r--r-- | tools/h5ls.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tools/h5ls.c b/tools/h5ls.c index 7a88ac4..18a1636 100644 --- a/tools/h5ls.c +++ b/tools/h5ls.c @@ -5,6 +5,7 @@ * Programmer: Robb Matzke <matzke@llnl.gov> * Monday, March 23, 1998 */ +#include <ctype.h> #include <hdf5.h> #include <stdio.h> #include <stdlib.h> @@ -56,6 +57,59 @@ usage: %s [OPTIONS] FILE [GROUP]\n\ /*------------------------------------------------------------------------- + * Function: dump_dataset_values + * + * Purpose: Prints all values of a dataset. + * + * Return: void + * + * Programmer: Robb Matzke + * Tuesday, July 21, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static void +dump_dataset_values(hid_t dset) +{ + hid_t file_space, mem_space, type; + hsize_t start, file_nelmts, mem_nelmts; + hssize_t zero = 0; + unsigned char buf[1024]; + hsize_t i; + + file_space = H5Dget_space(dset); + type = H5Dget_type(dset); + + if (H5Tequal(type, H5T_NATIVE_CHAR)) { + printf("%*svalue = \"", 26, ""); + file_nelmts = H5Sextent_npoints(file_space); + mem_nelmts = sizeof(buf); + mem_space = H5Screate_simple(1, &mem_nelmts, NULL); + for (start=0; start<file_nelmts; start+=mem_nelmts) { + mem_nelmts = MIN(mem_nelmts, file_nelmts-start); + H5Sselect_hyperslab(file_space, H5S_SELECT_SET, &start, NULL, + &mem_nelmts, NULL); + H5Sselect_hyperslab(mem_space, H5S_SELECT_SET, &zero, NULL, + &mem_nelmts, NULL); + H5Dread(dset, H5T_NATIVE_CHAR, mem_space, file_space, H5P_DEFAULT, + buf); + for (i=0; i<mem_nelmts; i++) { + if (isprint(buf[i])) putchar(buf[i]); + else printf("\\%03o", buf[i]); + } + } + H5Sclose(mem_space); + printf("\"\n"); + } + + H5Sclose(file_space); + H5Tclose(type); +} + + +/*------------------------------------------------------------------------- * Function: list_attr * * Purpose: Prints information about attributes. @@ -153,6 +207,7 @@ list (hid_t group, const char *name, void __unused__ *op_data) printf ("}\n"); H5Dclose (space); H5Aiterate (obj, NULL, list_attr, NULL); + dump_dataset_values(obj); H5Dclose (obj); } else if ((obj=H5Gopen (group, name))>=0) { printf ("Group\n"); |