summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/h5dump/h5dump.c178
1 files changed, 145 insertions, 33 deletions
diff --git a/tools/h5dump/h5dump.c b/tools/h5dump/h5dump.c
index 33feb36..59418cc 100644
--- a/tools/h5dump/h5dump.c
+++ b/tools/h5dump/h5dump.c
@@ -76,6 +76,10 @@ static int display_fi = FALSE; /*file index */
static int display_ai = TRUE; /*array index */
static int display_escape = FALSE; /*escape non printable characters */
+/* sort parameters */
+static H5_index_t sort_by = H5_INDEX_NAME; /*sort_by [creation_order | name] */
+static H5_iter_order_t sort_order = H5_ITER_INC; /*sort_order [ascending | descending] */
+
/**
** Added for XML **
**/
@@ -362,7 +366,7 @@ struct handler_t {
* parameters. The long-named ones can be partially spelled. When
* adding more, make sure that they don't clash with each other.
*/
-static const char *s_opts = "hnpeyBHirVa:c:d:f:g:k:l:t:w:xD:uX:o:b:F:s:S:A";
+static const char *s_opts = "hnpeyBHirVa:c:d:f:g:k:l:t:w:xD:uX:o:b:F:s:S:Aq:z:";
static struct long_options l_opts[] = {
{ "help", no_arg, 'h' },
{ "hel", no_arg, 'h' },
@@ -472,9 +476,12 @@ static struct long_options l_opts[] = {
{ "noindex", no_arg, 'y' },
{ "binary", require_arg, 'b' },
{ "form", require_arg, 'F' },
+ { "sort_by", require_arg, 'q' },
+ { "sort_order", require_arg, 'z' },
{ NULL, 0, '\0' }
};
+
/**
** Change for XML **
**
@@ -490,27 +497,27 @@ static struct long_options l_opts[] = {
/* The dump functions of the dump_function_table */
/* standard format: no change */
-static void dump_group(hid_t, const char *, H5_index_t idx_type);
-static void dump_named_datatype(hid_t, const char *);
-static void dump_dataset(hid_t, const char *, struct subset_t *);
-static void dump_dataspace(hid_t space);
-static void dump_datatype(hid_t type);
-static herr_t dump_attr(hid_t, const char *, void *);
-static void dump_data(hid_t, int, struct subset_t *, int);
-static void dump_dcpl(hid_t dcpl, hid_t type_id, hid_t obj_id);
-static void dump_comment(hid_t obj_id);
-static void dump_fcpl(hid_t fid);
-static void dump_fcontents(hid_t fid);
+static void dump_group(hid_t, const char *, H5_index_t idx_type, H5_iter_order_t iter_order);
+static void dump_named_datatype(hid_t, const char *);
+static void dump_dataset(hid_t, const char *, struct subset_t *);
+static void dump_dataspace(hid_t space);
+static void dump_datatype(hid_t type);
+static herr_t dump_attr(hid_t, const char *, void *);
+static void dump_data(hid_t, int, struct subset_t *, int);
+static void dump_dcpl(hid_t dcpl, hid_t type_id, hid_t obj_id);
+static void dump_comment(hid_t obj_id);
+static void dump_fcpl(hid_t fid);
+static void dump_fcontents(hid_t fid);
/* XML format: same interface, alternative output */
-static void xml_dump_group(hid_t, const char *, H5_index_t idx_type);
-static void xml_dump_named_datatype(hid_t, const char *);
-static void xml_dump_dataset(hid_t, const char *, struct subset_t *);
-static void xml_dump_dataspace(hid_t space);
-static void xml_dump_datatype(hid_t type);
-static herr_t xml_dump_attr(hid_t, const char *, void *);
-static void xml_dump_data(hid_t, int, struct subset_t *, int);
+static void xml_dump_group(hid_t, const char *, H5_index_t idx_type, H5_iter_order_t iter_order);
+static void xml_dump_named_datatype(hid_t, const char *);
+static void xml_dump_dataset(hid_t, const char *, struct subset_t *);
+static void xml_dump_dataspace(hid_t space);
+static void xml_dump_datatype(hid_t type);
+static herr_t xml_dump_attr(hid_t, const char *, void *);
+static void xml_dump_data(hid_t, int, struct subset_t *, int);
/**
** Added for XML **
@@ -519,13 +526,13 @@ static void xml_dump_data(hid_t, int, struct subset_t *, int);
**/
/* the table of dump functions */
typedef struct dump_functions_t {
- void (*dump_group_function) (hid_t, const char *, H5_index_t idx_type);
- void (*dump_named_datatype_function) (hid_t, const char *);
- void (*dump_dataset_function) (hid_t, const char *, struct subset_t *);
- void (*dump_dataspace_function) (hid_t);
- void (*dump_datatype_function) (hid_t);
- herr_t (*dump_attribute_function) (hid_t, const char *, void *);
- void (*dump_data_function) (hid_t, int, struct subset_t *, int);
+ void (*dump_group_function) (hid_t, const char *, H5_index_t idx_type, H5_iter_order_t iter_order);
+ void (*dump_named_datatype_function) (hid_t, const char *);
+ void (*dump_dataset_function) (hid_t, const char *, struct subset_t *);
+ void (*dump_dataspace_function) (hid_t);
+ void (*dump_datatype_function) (hid_t);
+ herr_t (*dump_attribute_function) (hid_t, const char *, void *);
+ void (*dump_data_function) (hid_t, int, struct subset_t *, int);
} dump_functions;
/* Standard DDL output */
@@ -1425,6 +1432,7 @@ dump_all(hid_t group, const char *name, const H5L_info_t *linfo, void UNUSED *op
/* Iterate into group */
+#if 0
if( (crt_order_flags == H5P_CRT_ORDER_TRACKED ) ||
(crt_order_flags == (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED)))
{
@@ -1435,6 +1443,13 @@ dump_all(hid_t group, const char *name, const H5L_info_t *linfo, void UNUSED *op
{
dump_function_table->dump_group_function(obj, name, H5_INDEX_NAME );
}
+
+#endif
+
+
+ dump_function_table->dump_group_function(obj, name, sort_by, sort_order);
+
+
if(H5Pclose(gcpl_id) < 0)
d_status = EXIT_FAILURE;
@@ -1821,13 +1836,14 @@ dump_named_datatype(hid_t type, const char *name)
*
* Call to dump_all -- add parameter to select everything.
*
- * Pedro Vicente, September 26, 2007
- * extra parameter H5_index_t to handle H5Literate iteration order
+ * Pedro Vicente, October 1, 2007
+ * extra parameters H5_index_t and H5_iter_order_t to handle H5Literate
+ * iteration order
*
*-------------------------------------------------------------------------
*/
static void
-dump_group(hid_t gid, const char *name, H5_index_t idx_type)
+dump_group(hid_t gid, const char *name, H5_index_t idx_type, H5_iter_order_t iter_order)
{
H5O_info_t oinfo;
hid_t dset, type;
@@ -1878,11 +1894,11 @@ dump_group(hid_t gid, const char *name, H5_index_t idx_type)
} else {
found_obj->displayed = TRUE;
H5Aiterate(gid, NULL, dump_attr, NULL);
- H5Literate(gid, ".", idx_type, H5_ITER_INC, NULL, dump_all, NULL, H5P_DEFAULT);
+ H5Literate(gid, ".", idx_type, iter_order, NULL, dump_all, NULL, H5P_DEFAULT);
}
} else {
H5Aiterate(gid, NULL, dump_attr, NULL);
- H5Literate(gid, ".", idx_type, H5_ITER_INC, NULL, dump_all, NULL, H5P_DEFAULT);
+ H5Literate(gid, ".", idx_type, iter_order, NULL, dump_all, NULL, H5P_DEFAULT);
}
indent -= COL;
@@ -2864,6 +2880,67 @@ set_binary_form(const char *form)
}
/*-------------------------------------------------------------------------
+ * Function: set_sort_by
+ *
+ * Purpose: set the "by" form of sorting by translating from a string input
+ * parameter to a H5_index_t return value
+ * current sort values are [creation_order | name]
+ *
+ * Return: H5_index_t form of sort or H5_INDEX_UNKNOWN if none found
+ *
+ * Programmer: Pedro Vicente Nunes
+ * October 1, 2007
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_index_t
+set_sort_by(const char *form)
+{
+ H5_index_t index = H5_INDEX_UNKNOWN;
+
+ if (strcmp(form,"name")==0) /* H5_INDEX_NAME */
+ index = H5_INDEX_NAME;
+ else if (strcmp(form,"creation_order")==0) /* H5_INDEX_CRT_ORDER */
+ index = H5_INDEX_CRT_ORDER;
+
+ return index;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: set_sort_order
+ *
+ * Purpose: set the order of sorting by translating from a string input
+ * parameter to a H5_iter_order_t return value
+ * current order values are [ascending | descending ]
+ *
+ * Return: H5_iter_order_t form of order or H5_ITER_UNKNOWN if none found
+ *
+ * Programmer: Pedro Vicente Nunes
+ * October 1, 2007
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_iter_order_t
+set_sort_order(const char *form)
+{
+ H5_iter_order_t iter_order = H5_ITER_UNKNOWN;
+
+ if (strcmp(form,"ascending")==0) /* H5_ITER_INC */
+ iter_order = H5_ITER_INC;
+ else if (strcmp(form,"descending")==0) /* H5_ITER_DEC */
+ iter_order = H5_ITER_DEC;
+
+ return iter_order;
+}
+
+
+/*-------------------------------------------------------------------------
* Function: handle_attributes
*
* Purpose: Handle the attributes from the command.
@@ -3176,7 +3253,9 @@ handle_groups(hid_t fid, char *group, void UNUSED * data)
error_msg(progname, "error in getting group creation properties\n");
d_status = EXIT_FAILURE;
}
+
+#if 0
if( (crt_order_flags == H5P_CRT_ORDER_TRACKED ) ||
(crt_order_flags == (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED)))
{
@@ -3188,6 +3267,11 @@ handle_groups(hid_t fid, char *group, void UNUSED * data)
dump_group(gid, group, H5_INDEX_NAME );
}
+#endif
+
+
+ dump_group(gid, group, sort_by, sort_order );
+
if(H5Pclose(gcpl_id) < 0)
d_status = EXIT_FAILURE;
@@ -3541,7 +3625,28 @@ parse_start:
break;
-
+ case 'q':
+
+ if ( ( sort_by = set_sort_by(opt_arg)) < 0)
+ {
+ /* failed to set "sort by" form */
+ usage(progname);
+ leave(EXIT_FAILURE);
+ }
+
+ break;
+
+ case 'z':
+
+ if ( ( sort_order = set_sort_order(opt_arg)) < 0)
+ {
+ /* failed to set "sort order" form */
+ usage(progname);
+ leave(EXIT_FAILURE);
+ }
+
+ break;
+
/** begin XML parameters **/
case 'x':
/* select XML output */
@@ -3911,6 +4016,7 @@ main(int argc, const char *argv[])
d_status = EXIT_FAILURE;
}
+#if 0
if( (crt_order_flags == H5P_CRT_ORDER_TRACKED ) ||
(crt_order_flags == (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED)))
{
@@ -3922,6 +4028,12 @@ main(int argc, const char *argv[])
dump_function_table->dump_group_function(gid, "/", H5_INDEX_NAME );
}
+
+#endif
+
+ dump_function_table->dump_group_function(gid, "/", sort_by, sort_order );
+
+
}
@@ -5172,7 +5284,7 @@ xml_dump_named_datatype(hid_t type, const char *name)
*-------------------------------------------------------------------------
*/
static void
-xml_dump_group(hid_t gid, const char *name, H5_index_t UNUSED idx_type)
+xml_dump_group(hid_t gid, const char *name, H5_index_t UNUSED idx_type, H5_iter_order_t UNUSED iter_order)
{
H5O_info_t oinfo;
char *cp;