diff options
-rw-r--r-- | tools/h5dump.c | 104 | ||||
-rw-r--r-- | tools/h5tools.c | 225 | ||||
-rw-r--r-- | tools/h5tools.h | 31 |
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*/ |