summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/H5FDmpio.h5
-rw-r--r--src/H5public.h42
-rw-r--r--test/h5test.h6
-rw-r--r--tools/h5ls.c61
-rw-r--r--tools/h5tools.c177
-rw-r--r--tools/h5tools.h19
6 files changed, 214 insertions, 96 deletions
diff --git a/src/H5FDmpio.h b/src/H5FDmpio.h
index fb61498..dab4d5e 100644
--- a/src/H5FDmpio.h
+++ b/src/H5FDmpio.h
@@ -46,8 +46,13 @@ __DLL__ htri_t H5FD_mpio_tas_allsame(H5FD_t *_file, hbool_t newval);
__DLL__ MPI_Comm H5FD_mpio_communicator(H5FD_t *_file);
__DLL__ herr_t H5FD_mpio_setup(H5FD_t *_file, MPI_Datatype btype, MPI_Datatype ftype,
haddr_t disp, hbool_t use_types);
+<<<<<<<<<<<<<< variant A
+__DLL__herr_t H5FD_mpio_wait_for_left_neighbor(H5FD_t *file);
+__DLL__herr_t H5FD_mpio_signal_right_neighbor(H5FD_t *file);
+>>>>>>>>>>>>>> variant B
__DLL__ herr_t H5FD_mpio_wait_for_left_neighbor(H5FD_t *file);
__DLL__ herr_t H5FD_mpio_signal_right_neighbor(H5FD_t *file);
+======= end of combination
#endif /*HAVE_PARALLEL*/
diff --git a/src/H5public.h b/src/H5public.h
index dadd5b0..0d1c498 100644
--- a/src/H5public.h
+++ b/src/H5public.h
@@ -23,12 +23,50 @@ static char RcsId[] = "@(#)$Revision$";
#ifndef _H5public_H
#define _H5public_H
+/*
+ * Undefine things that might get redefined in the H5config.h file if hdf5 is
+ * being included by other packages that use autoconf. The problem is that
+ * if the C preprocessor emits warning messages about redefinitions then
+ * autoconf will become confused and think that the hdf5 header file doesn't
+ * exist.
+ */
+#undef SIZEOF_INT8_T
+#undef SIZEOF_INT_FAST8_T
+#undef SIZEOF_INT_LEAST8_T
+#undef SIZEOF_UINT8_T
+#undef SIZEOF_UINT_FAST8_T
+#undef SIZEOF_UINT_LEAST8_T
+
+#undef SIZEOF_INT16_T
+#undef SIZEOF_INT_FAST16_T
+#undef SIZEOF_INT_LEAST16_T
+#undef SIZEOF_UINT16_T
+#undef SIZEOF_UINT_FAST16_T
+#undef SIZEOF_UINT_LEAST16_T
+
+#undef SIZEOF_INT32_T
+#undef SIZEOF_INT_FAST32_T
+#undef SIZEOF_INT_LEAST32_T
+#undef SIZEOF_UINT32_T
+#undef SIZEOF_UINT_FAST32_T
+#undef SIZEOF_UINT_LEAST32_T
+
+#undef SIZEOF_INT64_T
+#undef SIZEOF_INT_FAST64_T
+#undef SIZEOF_INT_LEAST64_T
+#undef SIZEOF_UINT64_T
+#undef SIZEOF_UINT_FAST64_T
+#undef SIZEOF_UINT_LEAST64_T
+
+/* Include files for public use... */
#include <H5config.h> /*from configure */
#include <sys/types.h>
#ifdef STDC_HEADERS
# include <limits.h> /*for H5T_NATIVE_CHAR defn in H5Tpublic.h */
#endif
-
+#ifdef HAVE_STDINT_H
+# include <stdint.h> /*for C9x types */
+#endif
#ifdef HAVE_STDDEF_H
# include <stddef.h>
#endif
@@ -119,7 +157,7 @@ typedef ssize_t hssize_t;
#elif SIZEOF_LONG_LONG>=8
typedef unsigned long long haddr_t;
# define HADDR_UNDEF ((haddr_t)(long long)(-1))
-# elif SIZEOF___INT64>=8
+#elif SIZEOF___INT64>=8
typedef unsigned __int64 haddr_t;
# define HADDR_UNDEF ((haddr_t)(__int64)(-1))
#else
diff --git a/test/h5test.h b/test/h5test.h
index 98f6060..fd8a21d 100644
--- a/test/h5test.h
+++ b/test/h5test.h
@@ -39,9 +39,9 @@ extern const char *FILENAME[];
* the FAILED() macro is invoked automatically when an API function fails.
*/
#define TESTING(WHAT) {printf("%-70s", "Testing " WHAT); fflush(stdout);}
-#define PASSED() puts(" PASSED")
-#define FAILED() puts("*FAILED*")
-#define SKIPPED() puts(" -SKIP-")
+#define PASSED() {puts(" PASSED");fflush(stdout);}
+#define FAILED() {puts("*FAILED*");fflush(stdout);}
+#define SKIPPED() {puts(" -SKIP-");fflush(stdout);}
/*
* Print the current location on the standard output stream.
diff --git a/tools/h5ls.c b/tools/h5ls.c
index 191445a..4d4d978 100644
--- a/tools/h5ls.c
+++ b/tools/h5ls.c
@@ -41,6 +41,7 @@ static hbool_t recursive_g = FALSE; /*recursive descent listing */
static hbool_t grp_literal_g = FALSE; /*list group, not contents */
static hbool_t hexdump_g = FALSE; /*show data as raw hexadecimal */
static hbool_t show_errors_g = FALSE; /*print HDF5 error messages */
+static hbool_t simple_output_g = FALSE; /*make output more machine-readable */
/* Info to pass to the iteration functions */
typedef struct iter_t {
@@ -108,6 +109,7 @@ usage: %s [OPTIONS] [OBJECTS...]\n\
-l, --label Label members of compound datasets\n\
-r, --recursive List all groups recursively, avoiding cycles\n\
-s, --string Print 1-byte integer datasets as ASCII\n\
+ -S, --simple Use a machine-readable output format\n\
-wN, --width=N Set the number of columns of output\n\
-v, --verbose Generate more verbose output\n\
-V, --version Print version number and exit\n\
@@ -1098,7 +1100,9 @@ display_type(hid_t type, int ind)
* Tuesday, July 21, 1998
*
* Modifications:
- *
+ * Robb Matzke, 1999-09-27
+ * Understands the simple_output_g switch which causes data to
+ * be displayed in a more machine-readable format.
*-------------------------------------------------------------------------
*/
static void
@@ -1107,21 +1111,41 @@ dump_dataset_values(hid_t dset)
hid_t f_type = H5Dget_type(dset);
size_t size = H5Tget_size(f_type);
h5dump_t info;
-
+ char string_prefix[64];
+
/* Set to all default values and then override */
memset(&info, 0, sizeof info);
- info.idx_fmt = "(%s)";
- info.line_ncols = width_g;
- info.line_multi_new = 1;
- if (label_g) info.cmpd_name = "%s=";
-
- /*
- * If a compound datatype is split across multiple lines then indent
- * the continuation line.
- */
- info.line_pre = " %s ";
- info.line_cont = " %s ";
+ if (simple_output_g) {
+ info.idx_fmt = "";
+ info.line_ncols = 65535; /*something big*/
+ info.line_per_line = 1;
+ info.line_multi_new = 0;
+ info.line_pre = " ";
+ info.line_cont = " ";
+
+ info.arr_pre = "";
+ info.arr_suf = "";
+ info.arr_sep = " ";
+
+ info.cmpd_pre = "";
+ info.cmpd_suf = "";
+ info.cmpd_sep = " ";
+ if (label_g) info.cmpd_name = "%s=";
+
+ info.elmt_suf1 = " ";
+ info.str_locale = ESCAPE_HTML;
+
+ } else {
+ info.idx_fmt = "(%s)";
+ info.line_ncols = width_g;
+ info.line_multi_new = 1;
+ if (label_g) info.cmpd_name = "%s=";
+ info.line_pre = " %s ";
+ info.line_cont = " %s ";
+ info.str_repeat = 8;
+ }
+
if (hexdump_g) {
/*
* Print all data in hexadecimal format if the `-x' or `--hexdump'
@@ -1136,7 +1160,9 @@ dump_dataset_values(hid_t dset)
info.ascii = TRUE;
info.elmt_suf1 = "";
info.elmt_suf2 = "";
- info.line_pre =" %s \"";
+ strcpy(string_prefix, info.line_pre);
+ strcat(string_prefix, "\"");
+ info.line_pre = string_prefix;
info.line_suf = "\"";
}
@@ -1211,12 +1237,14 @@ list_attr (hid_t obj, const char *attr_name, void UNUSED *op_data)
info.line_1st = " Data: ";
info.line_pre = " ";
info.line_cont = " ";
+ info.str_repeat = 8;
} else {
printf(" Data:\n");
info.idx_fmt = "(%s)";
info.line_pre = " %s ";
info.line_cont = " %s ";
+ info.str_repeat = 8;
}
info.line_ncols = width_g;
if (label_g) info.cmpd_name = "%s=";
@@ -1924,6 +1952,8 @@ main (int argc, char *argv[])
} else if (!strcmp(argv[argno], "--recursive")) {
recursive_g = TRUE;
fullname_g = TRUE;
+ } else if (!strcmp(argv[argno], "--simple")) {
+ simple_output_g = TRUE;
} else if (!strcmp(argv[argno], "--string")) {
string_g = TRUE;
} else if (!strncmp(argv[argno], "--width=", 8)) {
@@ -1996,6 +2026,9 @@ main (int argc, char *argv[])
recursive_g = TRUE;
fullname_g = TRUE;
break;
+ case 'S': /* --simple */
+ simple_output_g = TRUE;
+ break;
case 's': /* --string */
string_g = TRUE;
break;
diff --git a/tools/h5tools.c b/tools/h5tools.c
index 36ce038..5dbb7ff 100644
--- a/tools/h5tools.c
+++ b/tools/h5tools.c
@@ -61,12 +61,6 @@ int print_data(hid_t oid, hid_t _p_type, int obj_data);
#define REPEAT_VERBOSE
/*
- * This is the original value of the repeat_threshold in the h5dump_sprint
- * function.
- */
-#define H5DEFAULT_REPEAT_THRESHOLD 8
-
-/*
* The output functions need a temporary buffer to hold a piece of the
* dataset while it's being printed. This constant sets the limit on the
* size of that temporary buffer in bytes. For efficiency's sake, choose the
@@ -97,6 +91,7 @@ typedef struct h5dump_str_t {
/* Output variables */
typedef struct h5dump_context_t {
size_t cur_column; /*current column for output */
+ size_t cur_elmt; /*current element/output line */
int need_prefix; /*is line prefix needed? */
int ndims; /*dimensionality */
hsize_t p_min_idx[H5S_MAX_RANK]; /*min selected index */
@@ -613,11 +608,6 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
static char fmt_llong[8], fmt_ullong[8];
H5T_str_t pad;
H5G_stat_t sb;
- int repeat_threshold = H5DEFAULT_REPEAT_THRESHOLD;
-
- if (programtype == H5DUMP){
- repeat_threshold = -1; /*-1 means any amount of repeat allowed*/
- }
/* Build default formats for long long types */
if (!fmt_llong[0]) {
@@ -645,37 +635,45 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
} else if (info->ascii &&
(H5Tequal(type, H5T_NATIVE_SCHAR) ||
H5Tequal(type, H5T_NATIVE_UCHAR))) {
- switch (*((char*)vp)) {
- case '"':
- h5dump_str_append(str, "\\\"");
- break;
- case '\\':
- h5dump_str_append(str, "\\\\");
- break;
- case '\b':
- h5dump_str_append(str, "\\b");
- break;
- case '\f':
- h5dump_str_append(str, "\\f");
- break;
- case '\n':
- h5dump_str_append(str, "\\n");
- break;
- case '\r':
- h5dump_str_append(str, "\\r");
- break;
- case '\t':
- h5dump_str_append(str, "\\t");
- break;
- default:
- if (isprint((int)(*((char*)vp)))) {
- h5dump_str_append(str, "%c", *((char*)vp));
+ if (ESCAPE_HTML==info->str_locale) {
+ if (*((char*)vp)<=' ' || *((char*)vp)>'~') {
+ h5dump_str_append(str, "%%%02X", *((unsigned char*)vp));
} else {
- h5dump_str_append(str, "\\%03o", *((unsigned char*)vp));
+ h5dump_str_append(str, "%c", *((char*)vp));
+ }
+ } else {
+ switch (*((char*)vp)) {
+ case '"':
+ h5dump_str_append(str, "\\\"");
+ break;
+ case '\\':
+ h5dump_str_append(str, "\\\\");
+ break;
+ case '\b':
+ h5dump_str_append(str, "\\b");
+ break;
+ case '\f':
+ h5dump_str_append(str, "\\f");
+ break;
+ case '\n':
+ h5dump_str_append(str, "\\n");
+ break;
+ case '\r':
+ h5dump_str_append(str, "\\r");
+ break;
+ case '\t':
+ h5dump_str_append(str, "\\t");
+ break;
+ default:
+ if (isprint(*((char*)vp))) {
+ h5dump_str_append(str, "%c", *((char*)vp));
+ } else {
+ h5dump_str_append(str, "\\%03o", *((unsigned char*)vp));
+ }
+ break;
}
- break;
}
-
+
} else if (H5T_STRING==H5Tget_class(type)) {
size = H5Tget_size(type);
quote = '\0';
@@ -687,14 +685,12 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
/*
* Count how many times the next character repeats. If the
- * threshold is negative then that means it can repeat any number
+ * threshold is zero then that means it can repeat any number
* of times.
*/
- if (repeat_threshold >= 0) {
- j=1;
+ j=1;
+ if (info->str_repeat>0) {
while (i+j<size && ((char*)vp)[i]==((char*)vp)[i+j]) j++;
- } else {
- j = repeat_threshold - 1;
}
/*
@@ -703,7 +699,7 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
* the characters, then make sure the character to be repeated is
* in it's own quote.
*/
- if (j>repeat_threshold) {
+ if (info->str_repeat>0 && j>info->str_repeat) {
if (quote) h5dump_str_append(str, "%c", quote);
quote = '\'';
h5dump_str_append(str, "%s%c", i?" ":"", quote);
@@ -713,39 +709,48 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
}
/* Print the character */
- switch (((char*)vp)[i]) {
- case '"':
- h5dump_str_append(str, "\\\"");
- break;
- case '\\':
- h5dump_str_append(str, "\\\\");
- break;
- case '\b':
- h5dump_str_append(str, "\\b");
- break;
- case '\f':
- h5dump_str_append(str, "\\f");
- break;
- case '\n':
- h5dump_str_append(str, "\\n");
- break;
- case '\r':
- h5dump_str_append(str, "\\r");
- break;
- case '\t':
- h5dump_str_append(str, "\\t");
- break;
- default:
- if (isprint((int)((char*)vp)[i])) {
- h5dump_str_append(str, "%c", ((char*)vp)[i]);
+ if (ESCAPE_HTML==info->str_locale) {
+ if (((char*)vp)[i]<=' ' || ((char*)vp)[i]>'~') {
+ h5dump_str_append(str, "%%%02X", ((unsigned char*)vp)[i]);
} else {
- h5dump_str_append(str, "\\%03o", ((unsigned char*)vp)[i]);
+ h5dump_str_append(str, "%c", ((char*)vp)[i]);
+ }
+ } else {
+ switch (((char*)vp)[i]) {
+ case '"':
+ h5dump_str_append(str, "\\\"");
+ break;
+ case '\\':
+ h5dump_str_append(str, "\\\\");
+ break;
+ case '\b':
+ h5dump_str_append(str, "\\b");
+ break;
+ case '\f':
+ h5dump_str_append(str, "\\f");
+ break;
+ case '\n':
+ h5dump_str_append(str, "\\n");
+ break;
+ case '\r':
+ h5dump_str_append(str, "\\r");
+ break;
+ case '\t':
+ h5dump_str_append(str, "\\t");
+ break;
+ default:
+ if (isprint(((char*)vp)[i])) {
+ h5dump_str_append(str, "%c", ((char*)vp)[i]);
+ } else {
+ h5dump_str_append(str, "\\%03o",
+ ((unsigned char*)vp)[i]);
+ }
+ break;
}
- break;
}
-
+
/* Print the repeat count */
- if (j>repeat_threshold) {
+ if (info->str_repeat && j>info->str_repeat) {
#ifdef REPEAT_VERBOSE
h5dump_str_append(str, "%c repeats %d times", quote, j-1);
#else
@@ -756,6 +761,11 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
}
}
if (quote) h5dump_str_append(str, "%c", quote);
+
+ if (0==i) {
+ h5dump_str_append(str, "\"\""); /*empty string*/
+ }
+
} else if (H5Tequal(type, H5T_NATIVE_INT)) {
h5dump_str_append(str, OPT(info->fmt_int, "%d"),
@@ -1001,7 +1011,9 @@ h5dump_ncols(const char *s)
* Monday, April 26, 1999
*
* Modifications:
- *
+ * Robb Matzke, 1999-09-29
+ * If a new prefix is printed then the current element number is
+ * set back to zero.
*-------------------------------------------------------------------------
*/
static void
@@ -1036,6 +1048,7 @@ h5dump_simple_prefix(FILE *stream, const h5dump_t *info,
stream);
}
ctx->cur_column = ctx->prev_prefix_len = h5dump_str_len(&prefix);
+ ctx->cur_elmt = 0;
ctx->need_prefix = 0;
/* Free string */
@@ -1065,6 +1078,10 @@ h5dump_simple_prefix(FILE *stream, const h5dump_t *info,
* The `container' argument is the optional dataset for
* reference types.
*
+ * Robb Matzke, 1999-09-29
+ * Understands the `per_line' property which indicates that
+ * every Nth element should begin a new line.
+ *
*-------------------------------------------------------------------------
*/
static void
@@ -1087,7 +1104,7 @@ h5dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
if (info->line_ncols>0) ncols = info->line_ncols;
h5dump_simple_prefix(stream, info, ctx, 0, 0);
- for (i=0; i<nelmts; i++) {
+ for (i=0; i<nelmts; i++, ctx->cur_elmt++) {
/* Render the element */
h5dump_str_reset(&buffer);
@@ -1135,6 +1152,14 @@ h5dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
strlen(OPT(info->line_suf, ""))) > ncols) {
ctx->need_prefix = TRUE;
}
+
+ /*
+ * If too many elements have already been printed then we need to
+ * start a new line.
+ */
+ if (info->line_per_line>0 && ctx->cur_elmt>=info->line_per_line) {
+ ctx->need_prefix = TRUE;
+ }
/*
* Each OPTIONAL_LINE_BREAK embedded in the rendered string can cause
diff --git a/tools/h5tools.h b/tools/h5tools.h
index da63be0..d962cee 100644
--- a/tools/h5tools.h
+++ b/tools/h5tools.h
@@ -13,6 +13,8 @@
#include <hdf5.h>
#include <stdio.h>
+#define ESCAPE_HTML 1
+
/*
* Information about how to format output.
*/
@@ -77,6 +79,15 @@ typedef struct h5dump_t {
* escape. If `ascii' is zero then then 1-byte integers are
* printed as numeric values. The default is zero.
*
+ * str_locale: Determines how strings are printed. If zero then strings
+ * are printed like in C except. If set to ESCAPE_HTML then
+ * strings are printed using HTML encoding where each
+ * character not in the class [a-zA-Z0-9] is substituted
+ * with `%XX' where `X' is a hexadecimal digit.
+ *
+ * str_repeat: If set to non-zero then any character value repeated N
+ * or more times is printed as 'C'*N
+ *
* Numeric data is also subject to the formats for individual elements.
*/
hbool_t raw;
@@ -94,6 +105,8 @@ typedef struct h5dump_t {
const char *fmt_double;
const char *fmt_float;
int ascii;
+ int str_locale;
+ int str_repeat;
/*
* Fields associated with compound array members.
@@ -178,7 +191,10 @@ typedef struct h5dump_t {
/*
* Fields associated with entire lines.
*
- * ncols: Number of columns per line defaults to 80.
+ * ncols: Number of columns per line defaults to 80.
+ *
+ * per_line: If this field has a positive value then every Nth element
+ * will be printed at the beginning of a line.
*
* pre: Each line of output contains an optional prefix area
* before the data. This area can contain the index for the
@@ -224,6 +240,7 @@ typedef struct h5dump_t {
* unless it wouldn't fit.
*/
int line_ncols; /*columns of output */
+ size_t line_per_line; /*max elements per line */
const char *line_pre; /*prefix at front of each line */
const char *line_1st; /*alternate pre. on first line */
const char *line_cont; /*alternate pre. on continuation*/