diff options
Diffstat (limited to 'tools/h5dump')
-rw-r--r-- | tools/h5dump/h5dump.c | 66 | ||||
-rw-r--r-- | tools/h5dump/h5dumpgentest.c | 34 | ||||
-rwxr-xr-x | tools/h5dump/testh5dump.sh | 3 |
3 files changed, 91 insertions, 12 deletions
diff --git a/tools/h5dump/h5dump.c b/tools/h5dump/h5dump.c index 87ecb49..8f0e7e5 100644 --- a/tools/h5dump/h5dump.c +++ b/tools/h5dump/h5dump.c @@ -36,6 +36,7 @@ static int display_all = TRUE; static int display_bb = FALSE; static int display_oid = FALSE; static int display_data = TRUE; +static int display_char = FALSE; /*print 1-byte numbers as ASCII? */ static int usingdasho = FALSE; /** @@ -399,9 +400,9 @@ struct handler_t { */ #if 0 /* binary: not implemented yet */ -static const char *s_opts = "hbBHiVa:d:f:g:l:t:w:xD:o:s:S:c:k:"; +static const char *s_opts = "hbBHirVa:c:d:f:g:k:l:t:w:xD:o:s:S:"; #else -static const char *s_opts = "hBHiVa:d:f:g:l:t:w:xD:o:s:S:c:k:"; +static const char *s_opts = "hBHirVa:c:d:f:g:k:l:t:w:xD:o:s:S:"; #endif /* 0 */ static struct long_options l_opts[] = { { "help", no_arg, 'h' }, @@ -493,8 +494,8 @@ static struct long_options l_opts[] = { { "sta", require_arg, 's' }, { "stride", require_arg, 'S' }, { "strid", require_arg, 'S' }, - { "stri", require_arg, 'S' }, - { "str", require_arg, 'S' }, + { "string", no_arg, 'r' }, + { "strin", no_arg, 'r' }, { "width", require_arg, 'w' }, { "widt", require_arg, 'w' }, { "wid", require_arg, 'w' }, @@ -607,6 +608,7 @@ usage(const char *prog) 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, " -i, --object-ids Print the object ids\n"); + fprintf(stdout, " -r, --string Print 1-bytes integer datasets as ASCII\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"); @@ -1853,16 +1855,17 @@ dump_subsetting_header(struct subset_t *sset, int dims) static void dump_data(hid_t obj_id, int obj_data, struct subset_t *sset) { - h5dump_t *outputformat = &dataformat; - int status = -1; - void *buf; - hid_t space, type, p_type; - int ndims, i; - hsize_t size[64], nelmts = 1, alloc_size; - int depth; - int stdindent = COL; /* should be 3 */ + h5dump_t *outputformat = &dataformat; + int status = -1; + void *buf; + hid_t space, type, p_type; + int ndims, i; + hsize_t size[64], nelmts = 1, alloc_size; + int depth; + int stdindent = COL; /* should be 3 */ outputformat->line_ncols = nCols; + indent += COL; /* @@ -1889,7 +1892,39 @@ dump_data(hid_t obj_id, int obj_data, struct subset_t *sset) /* 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 */ type = H5Aget_type(obj_id); @@ -2460,6 +2495,9 @@ parse_start: display_oid = TRUE; last_was_dset = FALSE; break; + case 'r': + display_char = TRUE; + break; case 'V': print_version(progname); exit(EXIT_SUCCESS); @@ -2740,6 +2778,10 @@ main(int argc, const char *argv[]) error_msg(progname, "option \"%s\" not available for XML\n", "--object-ids"); exit(EXIT_FAILURE); + } else if (display_char == TRUE) { + error_msg(progname, "option \"%s\" not available for XML\n", + "--string"); + exit(EXIT_FAILURE); } else if (usingdasho) { error_msg(progname, "option \"%s\" not available for XML\n", "--output"); diff --git a/tools/h5dump/h5dumpgentest.c b/tools/h5dump/h5dumpgentest.c index d220b8b..496a0f6 100644 --- a/tools/h5dump/h5dumpgentest.c +++ b/tools/h5dump/h5dumpgentest.c @@ -64,6 +64,7 @@ #define FILE36 "tmulti" #define FILE37 "tlarge_objname.h5" #define FILE38 "tvlstr.h5" +#define FILE39 "tchar.h5" #define LENSTR 50 #define LENSTR2 11 @@ -2891,6 +2892,38 @@ static void gent_vlstr(void) 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); +} + int main(void) { gent_group(); @@ -2942,6 +2975,7 @@ int main(void) gent_large_objname(); gent_vlstr(); + gent_char(); return 0; } diff --git a/tools/h5dump/testh5dump.sh b/tools/h5dump/testh5dump.sh index 12a71de..5bc98cf 100755 --- a/tools/h5dump/testh5dump.sh +++ b/tools/h5dump/testh5dump.sh @@ -176,6 +176,9 @@ 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 |