summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/h5dump.c104
-rw-r--r--tools/h5tools.c225
-rw-r--r--tools/h5tools.h31
3 files changed, 254 insertions, 106 deletions
diff --git a/tools/h5dump.c b/tools/h5dump.c
index 783dd9e..833ff46 100644
--- a/tools/h5dump.c
+++ b/tools/h5dump.c
@@ -1033,21 +1033,116 @@ int i;
*
* Modifications:
*
- *-----------------------------------------------------------------------*/
+ *-----------------------------------------------------------------------
+ */
static void
dump_data (hid_t obj_id, int obj_data) {
+ h5dump_t info;
+ int status = -1;
+ void *buf;
+ char *attr_name = malloc(sizeof(char)*80);
+ hid_t attr, space, type, p_type;
+ int ndims, i;
+ hsize_t size[64], nelmts = 1;
+ int depth;
+ int stdindent = COL; /* should be 3*/
+
+ info.elmt_fmt = "%s";
+ info.elmt_suf1 = ",";
+ info.elmt_suf2 = " ";
+
+ info.idx_fmt = "";
+ info.idx_n_fmt = "";
+ info.idx_sep = "";
+
+ info.line_ncols = nCols;
+ info.line_multi_new = 1;
+ info.line_1st = " %s ";
+ info.line_pre = " ";
+ info.line_cont = " %s";
+ info.line_sep = "";
+ info.line_suf = "";
+ info.line_per_line = 0;
+ info.line_indent = " ";
+
+ info.cmpd_name = "";
+ info.cmpd_pre = "{\n";
+ info.cmpd_sep = ",\n";
+ info.cmpd_suf = "}";
+ info.cmpd_end = "\n";
+
+ info.fmt_double = "%g";
+ info.fmt_float = "%g";
+ info.fmt_schar = "%d";
+ info.fmt_int = "%d";
+
+ info.str_repeat = 0;
+ info.raw = 0;
+ info.ascii = 0;
+
+ info.arr_pre = "[ ";
+ info.arr_suf = " ]";
+ info.arr_sep = ", ";
+ info.arr_linebreak = 1;
+
+ info.skip_first = 1;
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 dont need any extra
+ indentation, depth will be 0.*/
+ depth = indent/stdindent - 2;
+
indentation (indent);
printf("%s %s\n", DATA, BEGIN);
+
/* Print all the values. */
- if (print_data(obj_id, -1, obj_data) < 0) {
+ if (obj_data == DATASET_DATA){
+ status = h5dump_dset(stdout, &info, obj_id, -1,depth);
+ }
+ else { /* need to call h5dump_mem for the attribute data */
+
+ type = H5Aget_type(obj_id);
+ /* if (type < 0) {
+ return (status);
+ }*/
+ p_type = h5dump_fixtype(type);
+ H5Tclose(type);
+
+ /* if (p_type < 0) return status;*/
+
+ space = H5Aget_space(obj_id);
+
+/* if (space < 0) return status;
+*/
+
+
+ ndims = H5Sget_simple_extent_dims(space, size, NULL);
+ for (i=0; i<ndims; i++) {
+ nelmts *= size[i];
+ }
+
+
+ buf = malloc(nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type)));
+ assert(buf);
+ if (H5Aread(obj_id, p_type, buf)>=0) {
+ status = h5dump_mem(stdout, &info, p_type, space, buf, depth);
+ }
+ free(buf);
+ H5Tclose(p_type);
+ H5Sclose(space);
+ H5Tclose(type);
+ H5Aclose(attr);
+ }
+
+
+ if (status < 0) {
indentation(indent+COL);
printf("Unable to print data.\n");
status = 1;
}
-
indentation(indent);
printf("%s\n", END);
indent -= COL;
@@ -1092,9 +1187,6 @@ main(int argc, char *argv[])
exit(1);
}
-/*init the programtype var fromt he tools lib*/
- programtype = H5DUMP;
-
opts = malloc((argc/2) * sizeof (int));
opts[0] = -1;
/* parse command line options */
diff --git a/tools/h5tools.c b/tools/h5tools.c
index dbe8be6..46806bb 100644
--- a/tools/h5tools.c
+++ b/tools/h5tools.c
@@ -25,7 +25,7 @@
int indent = 0;
int compound_data=0;
int nCols = 80;
-ProgType programtype = UNKNOWN;
+
static void display_numeric_data(hsize_t hs_nelmts, hid_t p_type,
unsigned char *sm_buf, size_t p_type_nbytes,
hsize_t p_nelmts, hsize_t dim_n_size,
@@ -94,6 +94,8 @@ typedef struct h5dump_context_t {
int prev_multiline; /*was prev datum multiline? */
size_t prev_prefix_len;/*length of previous prefix */
int continuation; /*continuation of previous data?*/
+ int 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*/
} h5dump_context_t;
typedef herr_t (*H5G_operator_t)(hid_t, const char*, void*);
@@ -528,16 +530,11 @@ h5dump_region(hid_t region, h5dump_str_t *str/*in,out*/)
ptdata = malloc(nblocks*ndims*2*sizeof(ptdata[0]));
H5Sget_select_hyper_blocklist(region, 0, nblocks, ptdata);
for (i=0; i<nblocks; i++) {
- if (programtype == H5DUMP) {
- h5dump_str_append(str, "%s",
- i?","OPTIONAL_LINE_BREAK" ":"",
- (unsigned long)i);
- }
- else {
+
h5dump_str_append(str, "%sBlk%lu: ",
i?","OPTIONAL_LINE_BREAK" ":"",
(unsigned long)i);
- }
+
/* Start coordinates and opposite corner */
for (j=0; j<ndims; j++) {
h5dump_str_append(str, "%s%lu", j?",":"(",
@@ -557,16 +554,11 @@ h5dump_region(hid_t region, h5dump_str_t *str/*in,out*/)
ptdata = malloc(npoints*ndims*sizeof(ptdata[0]));
H5Sget_select_elem_pointlist(region, 0, npoints, ptdata);
for (i=0; i<npoints; i++) {
- if (programtype == H5DUMP){
- h5dump_str_append(str, "%s",
- i?","OPTIONAL_LINE_BREAK" ":"",
- (unsigned long)i);
- }
- else {
+
h5dump_str_append(str, "%sPt%lu: ",
i?","OPTIONAL_LINE_BREAK" ":"",
(unsigned long)i);
- }
+
for (j=0; j<ndims; j++) {
h5dump_str_append(str, "%s%lu", j?",":"(",
(unsigned long)(ptdata[i*ndims+j]));
@@ -609,15 +601,16 @@ h5dump_region(hid_t region, h5dump_str_t *str/*in,out*/)
*/
static char *
h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
- hid_t container, hid_t type, void *vp)
+ hid_t container, hid_t type, void *vp, h5dump_context_t *ctx)
{
size_t i, n, offset, size, dims[H5S_MAX_RANK], nelmts, start;
char *name, quote='\0';
hid_t memb, obj, region;
- int nmembs, j, k, ndims, otype;
+ int nmembs, x, j, k, ndims, otype;
static char fmt_llong[8], fmt_ullong[8];
H5T_str_t pad;
H5G_stat_t sb;
+
/* Build default formats for long long types */
if (!fmt_llong[0]) {
@@ -688,11 +681,12 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
size = H5Tget_size(type);
quote = '\0';
pad = H5Tget_strpad(type);
-
+
for (i=0;
i<size && ((pad == H5T_STR_NULLPAD)?1:(((char*)vp)[i] != '\0'));
i++) {
-
+
+
/*
* Count how many times the next character repeats. If the
* threshold is zero then that means it can repeat any number
@@ -703,6 +697,7 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
while (i+j<size && ((char*)vp)[i]==((char*)vp)[i+j]) j++;
}
+
/*
* Print the opening quote. If the repeat count is high enough to
* warrant printing the number of repeats instead of enumerating
@@ -769,6 +764,7 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
quote = '\0';
i += j-1;
}
+
}
if (quote) h5dump_str_append(str, "%c", quote);
@@ -844,11 +840,20 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
} else if (H5T_COMPOUND==H5Tget_class(type)) {
nmembs = H5Tget_nmembers(type);
h5dump_str_append(str, "%s", OPT(info->cmpd_pre, "{"));
+
+
for (j=0; j<nmembs; j++) {
if (j) h5dump_str_append(str, "%s",
OPT(info->cmpd_sep,
", " OPTIONAL_LINE_BREAK));
-
+
+ /*put code to indent compound type elemnts here*/
+ if (ctx->indent_level >= 0) {
+ h5dump_str_append(str, "%s", OPT(info->line_pre, ""));
+ }
+ for (x=0; x < ctx->indent_level + 1; x++){
+ h5dump_str_append(str,"%s",OPT(info->line_indent,""));
+ }
/* The name */
name = H5Tget_member_name(type, j);
h5dump_str_append(str, OPT(info->cmpd_name, ""), name);
@@ -871,14 +876,38 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
OPT(info->arr_sep,
"," OPTIONAL_LINE_BREAK));
}
+
+ if ((ndims > 0) &&(info->arr_linebreak) && i && (i%dims[ndims-1] == 0)) {
+ h5dump_str_append(str, "%s", "\n");
+ /*need to indent some more here*/
+ if (ctx->indent_level >= 0) {
+ h5dump_str_append(str, "%s", OPT(info->line_pre, ""));
+ }
+ for (x=0; x < ctx->indent_level+1; x++){
+ h5dump_str_append(str,"%s",OPT(info->line_indent,""));
+ }
+ }
h5dump_sprint(str, info, container, memb,
- (char*)vp+offset+i*size);
+ (char*)vp+offset+i*size, ctx);
}
if (nelmts>1) {
h5dump_str_append(str, "%s", OPT(info->arr_suf, "]"));
}
H5Tclose(memb);
+
+
+ }
+
+ h5dump_str_append(str, "%s", OPT(info->cmpd_end, ""));
+
+ /*put code to indent compound type elemnts here*/
+ if (ctx->indent_level >= 0) {
+ h5dump_str_append(str, "%s", OPT(info->line_pre, ""));
}
+ for (x=0; x < ctx->indent_level; x++){
+ h5dump_str_append(str,"%s",OPT(info->line_indent,""));
+ }
+
h5dump_str_append(str, "%s", OPT(info->cmpd_suf, "}"));
} else if (H5T_ENUM==H5Tget_class(type)) {
@@ -905,14 +934,9 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
obj = H5Rdereference(container, H5R_DATASET_REGION, vp);
region = H5Rget_region(container, H5R_DATASET_REGION, vp);
H5Gget_objinfo(obj, ".", FALSE, &sb);
- if (programtype == H5DUMP) {
- h5dump_str_append(str, "%s %lu:%lu ",DATASET,sb.objno[1], sb.objno[0]);
- }
- else {
h5dump_str_append(str, "DSET-%lu:%lu:%lu:%lu-",
sb.fileno[1], sb.fileno[0],
sb.objno[1], sb.objno[0]);
- }
h5dump_region(region, str);
H5Sclose(region);
H5Dclose(obj);
@@ -945,26 +969,14 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
H5Tclose(obj);
break;
default:
- if (programtype == H5LS) {
- h5dump_str_append(str, "%u-", otype);
- }
- else if (programtype == H5DUMP) {
- h5dump_str_append(str, "unknown object reference type");
- }
- /* unable to close `obj' since we don't know the type */
+ h5dump_str_append(str, "%u-", otype);
break;
}
/* Print OID */
- if (programtype == H5DUMP) {
- h5dump_str_append(str, " %lu:%lu",
- sb.objno[1], sb.objno[0]);
- }
- else {
h5dump_str_append(str, "-%lu:%lu:%lu:%lu",
sb.fileno[1], sb.fileno[0],
sb.objno[1], sb.objno[0]);
- }
}
} else {
@@ -1031,14 +1043,18 @@ h5dump_simple_prefix(FILE *stream, const h5dump_t *info,
h5dump_context_t *ctx, hsize_t elmtno, int secnum)
{
h5dump_str_t prefix;
-
+ int i, templength = 0;
+ int indentlevel = 0;
+
memset(&prefix, 0, sizeof(h5dump_str_t));
if (!ctx->need_prefix) return;
/* Terminate previous line, if any */
if (ctx->cur_column) {
fputs(OPT(info->line_suf, ""), stream);
- putc('\n', stream);
+ if (info->line_ncols != ctx->cur_column) {
+ putc('\n', stream);
+ }
fputs(OPT(info->line_sep, ""), stream);
}
@@ -1047,17 +1063,35 @@ h5dump_simple_prefix(FILE *stream, const h5dump_t *info,
ctx->p_min_idx, ctx->p_max_idx);
/* Write new prefix to output */
- if (0==elmtno && 0==secnum && info->line_1st) {
- fputs(h5dump_str_fmt(&prefix, 0, info->line_1st),
- stream);
- } else if (secnum && info->line_cont) {
- fputs(h5dump_str_fmt(&prefix, 0, info->line_cont),
- stream);
- } else {
- fputs(h5dump_str_fmt(&prefix, 0, info->line_pre),
- stream);
- }
- ctx->cur_column = ctx->prev_prefix_len = h5dump_str_len(&prefix);
+ if (ctx->indent_level >= 0) {
+ if (0==elmtno && 0==secnum && info->line_1st) {
+ fputs(h5dump_str_fmt(&prefix, 0, info->line_1st),
+ stream);
+ } else if (secnum && info->line_cont) {
+ fputs(h5dump_str_fmt(&prefix, 0, info->line_cont),
+ stream);
+ } else {
+ fputs(h5dump_str_fmt(&prefix, 0, info->line_pre),
+ stream);
+ }
+ templength = h5dump_str_len(&prefix);
+ indentlevel = ctx->indent_level;
+ }
+ else {
+ indentlevel = 2; /*this is because sometimes we dont print out all the header
+ info for the data(like the tattr-2.ddl example. if that happens
+ the ctx->indent_level a negative so we need to skip the above
+ and just print out 2 indent levels. maybe the 2 should be a value
+ of the ctx struct??
+ */
+ }
+ for (i = 0; i < indentlevel; i++){
+ fputs(h5dump_str_fmt(&prefix, 0, info->line_indent), stream);
+ templength += h5dump_str_len(&prefix);
+ }
+
+ ctx->cur_column = ctx->prev_prefix_len = templength;
+
ctx->cur_elmt = 0;
ctx->need_prefix = 0;
@@ -1107,18 +1141,20 @@ h5dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
size_t ncols=80; /*available output width */
h5dump_str_t buffer; /*string into which to render */
int multiline; /*datum was multiline */
-
+ int elmt_counter = 0; /*counts the # elements printed. I needed something
+ that isnt 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(h5dump_str_t));
size = H5Tget_size(type);
if (info->line_ncols>0) ncols = info->line_ncols;
h5dump_simple_prefix(stream, info, ctx, 0, 0);
- for (i=0; i<nelmts; i++, ctx->cur_elmt++) {
-
+ for (i=0; i<nelmts; i++, ctx->cur_elmt++, elmt_counter++){
/* Render the element */
h5dump_str_reset(&buffer);
- h5dump_sprint(&buffer, info, container, type, mem+i*size);
+ h5dump_sprint(&buffer, info, container, type, mem+i*size, ctx);
if (i+1<nelmts || 0==(flags & END_OF_DATA)) {
h5dump_str_append(&buffer, "%s", OPT(info->elmt_suf1, ","));
}
@@ -1131,7 +1167,7 @@ h5dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
if (1==info->line_multi_new &&
(ctx->cur_column + h5dump_ncols(s) +
strlen(OPT(info->elmt_suf2, " ")) +
- strlen(OPT(info->line_suf, ""))) > ncols) {
+ strlen(OPT(info->line_suf, ""))) >= ncols) {
if (ctx->prev_multiline) {
/*
* ... and the previous element also occupied more than one
@@ -1150,6 +1186,20 @@ h5dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
}
}
+ /*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->cur_elmt%ctx->size_last_dim) == 0){
+ ctx->need_prefix = TRUE;
+ }
+
+ if (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
@@ -1184,7 +1234,10 @@ h5dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
* information would cause the output to wrap then we need to
* start a new line.
*/
- if ((ctx->cur_column + strlen(section) +
+ /*added the info->skip_first because the dumper does not want this check
+ to happen for the first line
+ */
+ if ((!(info->skip_first && i == 0)) && (ctx->cur_column + strlen(section) +
strlen(OPT(info->elmt_suf2, " ")) +
strlen(OPT(info->line_suf, ""))) > ncols) {
ctx->need_prefix = 1;
@@ -1194,6 +1247,7 @@ h5dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
* Print the prefix or separate the beginning of this element
* from the previous element.
*/
+
if (ctx->need_prefix) {
if (secnum) multiline++;
h5dump_simple_prefix(stream, info, ctx, i, secnum);
@@ -1205,6 +1259,7 @@ h5dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
/* Print the section */
fputs(section, stream);
ctx->cur_column += strlen(section);
+
}
ctx->prev_multiline = multiline;
}
@@ -1236,7 +1291,7 @@ h5dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
*/
static int
h5dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset,
- hid_t p_type)
+ hid_t p_type, int indentlevel)
{
hid_t f_space; /*file data space */
hsize_t elmtno, i; /*counters */
@@ -1270,6 +1325,7 @@ h5dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset,
* match the dimensionality of the dataset.
*/
memset(&ctx, 0, sizeof ctx);
+ ctx.indent_level = indentlevel;
ctx.need_prefix = 1;
f_space = H5Dget_space(dset);
ctx.ndims = H5Sget_simple_extent_ndims(f_space);
@@ -1283,6 +1339,7 @@ h5dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset,
}
if (0==p_nelmts) return 0; /*nothing to print*/
+ ctx.size_last_dim = total_size[ctx.ndims-1];
/*
* Determine the strip mine size and allocate a buffer. The strip mine is
* a hyperslab whose size is manageable.
@@ -1329,7 +1386,9 @@ h5dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset,
/* Print the data */
flags = ((0==elmtno ? START_OF_DATA : 0) |
(elmtno+hs_nelmts>=p_nelmts ? END_OF_DATA : 0));
- if (programtype == UNKNOWN){
+ h5dump_simple_data(stream, info, dset, &ctx, flags, hs_nelmts, p_type, sm_buf);
+
+/* if (programtype == UNKNOWN){
return FAIL;
} else if (programtype == H5LS){
h5dump_simple_data(stream, info, dset, &ctx, flags, hs_nelmts,
@@ -1387,7 +1446,7 @@ h5dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset,
}
}
-
+*/
/* 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];
@@ -1433,11 +1492,12 @@ h5dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset,
*/
static int
h5dump_simple_mem(FILE *stream, const h5dump_t *info, hid_t type,
- hid_t space, void *mem)
+ hid_t space, void *mem, int indentlevel)
{
hsize_t i; /*counters */
hsize_t nelmts; /*total selected elmts */
- h5dump_context_t ctx; /*printing context */
+ h5dump_context_t ctx; /*printing context */
+
/*
* Check that everything looks okay. The dimensionality must not be too
@@ -1445,6 +1505,7 @@ h5dump_simple_mem(FILE *stream, const h5dump_t *info, hid_t type,
* 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(space);
if ((size_t)(ctx.ndims)>NELMTS(ctx.p_min_idx)) return -1;
@@ -1452,11 +1513,17 @@ h5dump_simple_mem(FILE *stream, const h5dump_t *info, hid_t type,
/* Assume entire data space to be printed */
for (i=0; i<(hsize_t)(ctx.ndims); i++) ctx.p_min_idx[i] = 0;
H5Sget_simple_extent_dims(space, ctx.p_max_idx, NULL);
+
+
for (i=0, nelmts=1; i<(hsize_t)(ctx.ndims); i++) {
nelmts *= ctx.p_max_idx[i] - ctx.p_min_idx[i];
}
if (0==nelmts) return 0; /*nothing to print*/
+
+ ctx.size_last_dim = ctx.p_max_idx[ctx.ndims-1];
+ ctx.indent_level = indentlevel;
+
/* Print it */
h5dump_simple_data(stream, info, -1/*no dataset*/, &ctx,
START_OF_DATA|END_OF_DATA, nelmts, type, mem);
@@ -1547,26 +1614,8 @@ h5dump_fixtype(hid_t f_type)
* strDUAction == TRUE. if it is false we will do the original action
* here.
*/
- if (programtype == H5DUMP) {
- m_type = H5Tcopy(H5T_C_S1);
- H5Tset_size(m_type, size);
- strpad = H5Tget_strpad(f_type) ;
- H5Tset_strpad(m_type, strpad);
-
- if (H5Tequal(m_type,f_type) < 0) {
- H5Tclose(m_type);
- m_type = H5Tcopy(H5T_FORTRAN_S1);
- H5Tset_size(m_type, size);
- H5Tset_strpad(m_type, strpad);
- if (H5Tequal(m_type,f_type) < 0)
- m_type = -1;
- }
- } else if (programtype == H5LS) {
m_type = H5Tcopy(f_type);
H5Tset_cset(m_type, H5T_CSET_ASCII);
- } else if (programtype == UNKNOWN){
- return FAIL;
- }
break;
case H5T_COMPOUND:
@@ -1692,7 +1741,7 @@ h5dump_fixtype(hid_t f_type)
*-------------------------------------------------------------------------
*/
int
-h5dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t _p_type)
+h5dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t _p_type, int indentlevel)
{
hid_t f_space;
hid_t p_type = _p_type;
@@ -1723,7 +1772,7 @@ h5dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t _p_type)
H5Sclose(f_space);
/* Print the data */
- status = h5dump_simple_dset(stream, info, dset, p_type);
+ status = h5dump_simple_dset(stream, info, dset, p_type, indentlevel);
if (p_type!=_p_type) H5Tclose(p_type);
return status;
}
@@ -1749,7 +1798,7 @@ h5dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t _p_type)
*/
int
h5dump_mem(FILE *stream, const h5dump_t *info, hid_t type, hid_t space,
- void *mem)
+ void *mem,int indentlevel)
{
h5dump_t info_dflt;
@@ -1762,7 +1811,7 @@ h5dump_mem(FILE *stream, const h5dump_t *info, hid_t type, hid_t space,
/* Check the data space */
if (H5Sis_simple(space)<=0) return -1;
- return h5dump_simple_mem(stream, info, type, space, mem);
+ return h5dump_simple_mem(stream, info, type, space, mem, indentlevel);
}
@@ -1847,7 +1896,7 @@ int temp;
for (i=0; i<hs_nelmts && (elmtno+i) < p_nelmts; i++) {
h5dump_str_reset(&tempstr);
- h5dump_sprint(&tempstr, &info, container, p_type, sm_buf+i*p_type_nbytes);
+ h5dump_sprint(&tempstr, &info, container, p_type, sm_buf+i*p_type_nbytes,NULL);
if (isref) {
for (x = 0; x <tempstr.len; x++){
/* removes the strange characters */
@@ -2007,7 +2056,7 @@ static void display_string
h5dump_str_reset(&tempstr);
h5dump_sprint(&tempstr, &info, -1/*no container*/, p_type,
- sm_buf+i*p_type_nbytes);
+ sm_buf+i*p_type_nbytes,NULL);
memmove(tempstr.s, tempstr.s + 1, tempstr.len -1);
tempstr.s[tempstr.len - 2] = '\0';
@@ -2340,7 +2389,7 @@ print_data(hid_t oid, hid_t _p_type, int obj_data)
if (H5Sis_simple(f_space) >= 0) {
if (obj_data == DATASET_DATA) {
- status = h5dump_simple_dset(NULL,NULL, oid,p_type);
+ status = h5dump_simple_dset(NULL,NULL, oid,p_type,0);
}
else { /*attribute data*/
status = h5dump_attr(oid,p_type);
diff --git a/tools/h5tools.h b/tools/h5tools.h
index 8d806f2..e3e30a1 100644
--- a/tools/h5tools.h
+++ b/tools/h5tools.h
@@ -108,7 +108,6 @@ typedef struct h5dump_t {
int ascii;
int str_locale;
int str_repeat;
-
/*
* Fields associated with compound array members.
*
@@ -121,10 +120,14 @@ typedef struct h5dump_t {
*
* 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.
@@ -143,12 +146,16 @@ typedef struct h5dump_t {
* The default is a left curly brace.
*
* suf: A string to print at the end of each compound type. The
- * default is a right curly brace.
+ * 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 the individual elements.
@@ -239,6 +246,9 @@ typedef struct h5dump_t {
* 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 */
@@ -248,13 +258,17 @@ typedef struct h5dump_t {
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*/
+
+ int skip_first; /*used to skip the first set of checks for line length*/
+
} h5dump_t;
hid_t h5dump_fixtype(hid_t f_type);
-int h5dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t p_type);
+int h5dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t p_typ,int indentlevel);
int h5dump_mem(FILE *stream, const h5dump_t *info, hid_t type, hid_t space,
- void *mem);
+ void *mem, int indentlevel);
int copy_atomic_char(char* output, char* input, int numchar, int freespace);
/*if we get a new program that needs to use the library add its name here*/
@@ -315,13 +329,6 @@ void init_prefix(char **temp, int);
extern int indent;
extern void indentation(int);
extern int nCols;
-/*
- used to determine what action to take in certain cases
- this variable should be set at the beginning of all programs
- that use the lib
- */
-extern ProgType programtype;
-
/* taken from h5dump.h*/