summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/h5ls/h5ls.c2179
-rwxr-xr-xtools/h5ls/testh5ls.sh4
-rw-r--r--tools/testfiles/tattr2.h5bin0 -> 7720 bytes
-rw-r--r--tools/testfiles/tattr2.ls48
4 files changed, 1165 insertions, 1066 deletions
diff --git a/tools/h5ls/h5ls.c b/tools/h5ls/h5ls.c
index f5798df..735a770 100644
--- a/tools/h5ls/h5ls.c
+++ b/tools/h5ls/h5ls.c
@@ -28,50 +28,50 @@
#include "h5tools_utils.h"
/* Command-line switches */
-static int verbose_g = 0; /*lots of extra output */
-static int width_g = 80; /*output width in characters */
-static hbool_t address_g = FALSE; /*print raw data addresses */
-static hbool_t data_g = FALSE; /*display dataset values? */
-static hbool_t label_g = FALSE; /*label compound values? */
-static hbool_t string_g = FALSE; /*print 1-byte numbers as ASCII? */
-static hbool_t fullname_g = FALSE; /*print full path names */
-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 */
+static int verbose_g = 0; /*lots of extra output */
+static int width_g = 80; /*output width in characters */
+static hbool_t address_g = FALSE; /*print raw data addresses */
+static hbool_t data_g = FALSE; /*display dataset values? */
+static hbool_t label_g = FALSE; /*label compound values? */
+static hbool_t string_g = FALSE; /*print 1-byte numbers as ASCII? */
+static hbool_t fullname_g = FALSE; /*print full path names */
+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 */
static hbool_t show_file_name_g = FALSE;/*show file name for full names */
/* Info to pass to the iteration functions */
typedef struct iter_t {
- const char *container; /*full name of the container object */
+ const char *container; /*full name of the container object */
} iter_t;
/* Table containing object id and object name */
static struct {
- int nalloc; /*number of slots allocated */
- int nobjs; /*number of objects */
+ int nalloc; /*number of slots allocated */
+ int nobjs; /*number of objects */
struct {
- unsigned long id[2]; /*object number */
- char *name; /*full object name */
+ unsigned long id[2]; /*object number */
+ char *name; /*full object name */
} *obj;
} idtab_g;
/* Information about how to display each type of object */
static struct dispatch_t {
- const char *name;
- hid_t (*open)(hid_t loc, const char *name);
- herr_t (*close)(hid_t obj);
- herr_t (*list1)(hid_t obj);
- herr_t (*list2)(hid_t obj, const char *name);
+ const char *name;
+ hid_t (*open)(hid_t loc, const char *name);
+ herr_t (*close)(hid_t obj);
+ herr_t (*list1)(hid_t obj);
+ herr_t (*list2)(hid_t obj, const char *name);
} dispatch_g[H5G_NTYPES];
-#define DISPATCH(TYPE,NAME,OPEN,CLOSE,LIST1,LIST2) { \
- dispatch_g[TYPE].name = (NAME); \
- dispatch_g[TYPE].open = (OPEN); \
- dispatch_g[TYPE].close = (CLOSE); \
- dispatch_g[TYPE].list1 = (LIST1); \
- dispatch_g[TYPE].list2 = (LIST2); \
+#define DISPATCH(TYPE,NAME,OPEN,CLOSE,LIST1,LIST2) { \
+ dispatch_g[TYPE].name = (NAME); \
+ dispatch_g[TYPE].open = (OPEN); \
+ dispatch_g[TYPE].close = (CLOSE); \
+ dispatch_g[TYPE].list1 = (LIST1); \
+ dispatch_g[TYPE].list2 = (LIST2); \
}
static herr_t list (hid_t group, const char *name, void *cd);
@@ -80,13 +80,13 @@ static char *fix_name(const char *path, const char *base);
/*-------------------------------------------------------------------------
- * Function: usage
+ * Function: usage
*
- * Purpose: Prints a usage message on stderr and then returns.
+ * Purpose: Prints a usage message on stderr and then returns.
*
- * Return: void
+ * Return: void
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, July 16, 1998
*
* Modifications:
@@ -120,18 +120,18 @@ usage: %s [OPTIONS] [OBJECTS...]\n\
within the file then the contents of the root group are displayed).\n\
The file name may include a printf(3C) integer format such as\n\
\"%%05d\" to open a file family.\n",
- progname);
+ progname);
}
/*-------------------------------------------------------------------------
- * Function: sym_insert
+ * Function: sym_insert
*
- * Purpose: Add a symbol to the table.
+ * Purpose: Add a symbol to the table.
*
- * Return: void
+ * Return: void
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, January 21, 1999
*
* Modifications:
@@ -141,7 +141,7 @@ usage: %s [OPTIONS] [OBJECTS...]\n\
static void
sym_insert(H5G_stat_t *sb, const char *name)
{
- int n;
+ int n;
/*
* Don't add it if the link count is 1 because such an object can only
@@ -151,9 +151,9 @@ sym_insert(H5G_stat_t *sb, const char *name)
/* Extend the table */
if (idtab_g.nobjs>=idtab_g.nalloc) {
- idtab_g.nalloc = MAX(256, 2*idtab_g.nalloc);
- idtab_g.obj = realloc(idtab_g.obj,
- idtab_g.nalloc*sizeof(idtab_g.obj[0]));
+ idtab_g.nalloc = MAX(256, 2*idtab_g.nalloc);
+ idtab_g.obj = realloc(idtab_g.obj,
+ idtab_g.nalloc*sizeof(idtab_g.obj[0]));
}
/* Insert the entry */
@@ -166,15 +166,15 @@ sym_insert(H5G_stat_t *sb, const char *name)
/*-------------------------------------------------------------------------
- * Function: sym_lookup
+ * Function: sym_lookup
*
- * Purpose: Find another name for the specified object.
+ * Purpose: Find another name for the specified object.
*
- * Return: Success: Ptr to another name.
+ * Return: Success: Ptr to another name.
*
- * Failure: NULL
+ * Failure: NULL
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, January 21, 1999
*
* Modifications:
@@ -184,29 +184,29 @@ sym_insert(H5G_stat_t *sb, const char *name)
static char *
sym_lookup(H5G_stat_t *sb)
{
- int n;
+ int n;
if (sb->nlink<2) return NULL; /*only one name possible*/
for (n=0; n<idtab_g.nobjs; n++) {
- if (idtab_g.obj[n].id[0]==sb->objno[0] &&
- idtab_g.obj[n].id[1]==sb->objno[1]) {
- return idtab_g.obj[n].name;
- }
+ if (idtab_g.obj[n].id[0]==sb->objno[0] &&
+ idtab_g.obj[n].id[1]==sb->objno[1]) {
+ return idtab_g.obj[n].name;
+ }
}
return NULL;
}
/*-------------------------------------------------------------------------
- * Function: display_string
+ * Function: display_string
*
- * Purpose: Print a string value by escaping unusual characters. If
- * STREAM is null then we only count how large the output would
- * be.
+ * Purpose: Print a string value by escaping unusual characters. If
+ * STREAM is null then we only count how large the output would
+ * be.
*
- * Return: Number of characters printed.
+ * Return: Number of characters printed.
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, November 5, 1998
*
* Modifications:
@@ -216,80 +216,80 @@ sym_lookup(H5G_stat_t *sb)
static int
display_string(FILE *stream, const char *s, hbool_t escape_spaces)
{
- int nprint=0;
+ int nprint=0;
for (/*void*/; s && *s; s++) {
- switch (*s) {
- case '"':
- if (stream) fprintf(stream, "\\\"");
- nprint += 2;
- break;
- case '\\':
- if (stream) fprintf(stream, "\\\\");
- nprint += 2;
- break;
- case '\b':
- if (stream) fprintf(stream, "\\b");
- nprint += 2;
- break;
- case '\f':
- if (stream) fprintf(stream, "\\f");
- nprint += 2;
- break;
- case '\n':
- if (stream) fprintf(stream, "\\n");
- nprint += 2;
- break;
- case '\r':
- if (stream) fprintf(stream, "\\r");
- nprint += 2;
- break;
- case '\t':
- if (stream) fprintf(stream, "\\t");
- nprint += 2;
- break;
- case ' ':
- if (escape_spaces) {
- if (stream) fprintf(stream, "\\ ");
- nprint += 2;
- } else {
- if (stream) fprintf(stream, " ");
- nprint++;
- }
- break;
- default:
- if (isprint((int)*s)) {
- if (stream) putc(*s, stream);
- nprint++;
- } else {
- if (stream) {
- fprintf(stream, "\\%03o", *((const unsigned char*)s));
- }
- nprint += 4;
- }
- break;
- }
+ switch (*s) {
+ case '"':
+ if (stream) fprintf(stream, "\\\"");
+ nprint += 2;
+ break;
+ case '\\':
+ if (stream) fprintf(stream, "\\\\");
+ nprint += 2;
+ break;
+ case '\b':
+ if (stream) fprintf(stream, "\\b");
+ nprint += 2;
+ break;
+ case '\f':
+ if (stream) fprintf(stream, "\\f");
+ nprint += 2;
+ break;
+ case '\n':
+ if (stream) fprintf(stream, "\\n");
+ nprint += 2;
+ break;
+ case '\r':
+ if (stream) fprintf(stream, "\\r");
+ nprint += 2;
+ break;
+ case '\t':
+ if (stream) fprintf(stream, "\\t");
+ nprint += 2;
+ break;
+ case ' ':
+ if (escape_spaces) {
+ if (stream) fprintf(stream, "\\ ");
+ nprint += 2;
+ } else {
+ if (stream) fprintf(stream, " ");
+ nprint++;
+ }
+ break;
+ default:
+ if (isprint((int)*s)) {
+ if (stream) putc(*s, stream);
+ nprint++;
+ } else {
+ if (stream) {
+ fprintf(stream, "\\%03o", *((const unsigned char*)s));
+ }
+ nprint += 4;
+ }
+ break;
+ }
}
return nprint;
}
/*-------------------------------------------------------------------------
- * Function: display_native_type
+ * Function: display_native_type
*
- * Purpose: Prints the name of a native C data type.
+ * Purpose: Prints the name of a native C data type.
*
- * Return: Success: TRUE
+ * Return: Success: TRUE
*
- * Failure: FALSE, nothing printed.
+ * Failure: FALSE, nothing printed.
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, November 5, 1998
*
* Modifications:
- * Robb Matzke, 1999-06-11
- * Added the C9x types, but we still prefer to display the types
- * from the C language itself (like `int' vs. `int32_t').
+ * Robb Matzke, 1999-06-11
+ * Added the C9x types, but we still prefer to display the types
+ * from the C language itself (like `int' vs. `int32_t').
*
*-------------------------------------------------------------------------
*/
@@ -297,112 +297,112 @@ static hbool_t
display_native_type(hid_t type, int UNUSED ind)
{
if (H5Tequal(type, H5T_NATIVE_SCHAR)) {
- printf("native signed char");
+ printf("native signed char");
} else if (H5Tequal(type, H5T_NATIVE_UCHAR)) {
- printf("native unsigned char");
+ printf("native unsigned char");
} else if (H5Tequal(type, H5T_NATIVE_INT)) {
- printf("native int");
+ printf("native int");
} else if (H5Tequal(type, H5T_NATIVE_UINT)) {
- printf("native unsigned int");
+ printf("native unsigned int");
} else if (H5Tequal(type, H5T_NATIVE_SHORT)) {
- printf("native short");
+ printf("native short");
} else if (H5Tequal(type, H5T_NATIVE_USHORT)) {
- printf("native unsigned short");
+ printf("native unsigned short");
} else if (H5Tequal(type, H5T_NATIVE_LONG)) {
- printf("native long");
+ printf("native long");
} else if (H5Tequal(type, H5T_NATIVE_ULONG)) {
- printf("native unsigned long");
+ printf("native unsigned long");
} else if (H5Tequal(type, H5T_NATIVE_LLONG)) {
- printf("native long long");
+ printf("native long long");
} else if (H5Tequal(type, H5T_NATIVE_ULLONG)) {
- printf("native unsigned long long");
+ printf("native unsigned long long");
} else if (H5Tequal(type, H5T_NATIVE_FLOAT)) {
- printf("native float");
+ printf("native float");
} else if (H5Tequal(type, H5T_NATIVE_DOUBLE)) {
- printf("native double");
+ printf("native double");
} else if (H5Tequal(type, H5T_NATIVE_LDOUBLE)) {
- printf("native long double");
+ printf("native long double");
} else if (H5Tequal(type, H5T_NATIVE_INT8)) {
- printf("native int8_t");
+ printf("native int8_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT8)) {
- printf("native uint8_t");
+ printf("native uint8_t");
} else if (H5Tequal(type, H5T_NATIVE_INT16)) {
- printf("native int16_t");
+ printf("native int16_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT16)) {
- printf("native uint16_t");
+ printf("native uint16_t");
} else if (H5Tequal(type, H5T_NATIVE_INT32)) {
- printf("native int32_t");
+ printf("native int32_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT32)) {
- printf("native uint32_t");
+ printf("native uint32_t");
} else if (H5Tequal(type, H5T_NATIVE_INT64)) {
- printf("native int64_t");
+ printf("native int64_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT64)) {
- printf("native uint64_t");
+ printf("native uint64_t");
} else if (H5Tequal(type, H5T_NATIVE_INT_LEAST8)) {
- printf("native int_least8_t");
+ printf("native int_least8_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST8)) {
- printf("native uint_least8_t");
+ printf("native uint_least8_t");
} else if (H5Tequal(type, H5T_NATIVE_INT_LEAST16)) {
- printf("native int_least16_t");
+ printf("native int_least16_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST16)) {
- printf("native uint_least16_t");
+ printf("native uint_least16_t");
} else if (H5Tequal(type, H5T_NATIVE_INT_LEAST32)) {
- printf("native int_least32_t");
+ printf("native int_least32_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST32)) {
- printf("native uint_least32_t");
+ printf("native uint_least32_t");
} else if (H5Tequal(type, H5T_NATIVE_INT_LEAST64)) {
- printf("native int_least64_t");
+ printf("native int_least64_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST64)) {
- printf("native uint_least64_t");
+ printf("native uint_least64_t");
} else if (H5Tequal(type, H5T_NATIVE_INT_FAST8)) {
- printf("native int_fast8_t");
+ printf("native int_fast8_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT_FAST8)) {
- printf("native uint_fast8_t");
+ printf("native uint_fast8_t");
} else if (H5Tequal(type, H5T_NATIVE_INT_FAST16)) {
- printf("native int_fast16_t");
+ printf("native int_fast16_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT_FAST16)) {
- printf("native uint_fast16_t");
+ printf("native uint_fast16_t");
} else if (H5Tequal(type, H5T_NATIVE_INT_FAST32)) {
- printf("native int_fast32_t");
+ printf("native int_fast32_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT_FAST32)) {
- printf("native uint_fast32_t");
+ printf("native uint_fast32_t");
} else if (H5Tequal(type, H5T_NATIVE_INT_FAST64)) {
- printf("native int_fast64_t");
+ printf("native int_fast64_t");
} else if (H5Tequal(type, H5T_NATIVE_UINT_FAST64)) {
- printf("native uint_fast64_t");
+ printf("native uint_fast64_t");
} else if (H5Tequal(type, H5T_NATIVE_B8)) {
- printf("native 8-bit field");
+ printf("native 8-bit field");
} else if (H5Tequal(type, H5T_NATIVE_B16)) {
- printf("native 16-bit field");
+ printf("native 16-bit field");
} else if (H5Tequal(type, H5T_NATIVE_B32)) {
- printf("native 32-bit field");
+ printf("native 32-bit field");
} else if (H5Tequal(type, H5T_NATIVE_B64)) {
- printf("native 64-bit field");
+ printf("native 64-bit field");
} else if (H5Tequal(type, H5T_NATIVE_HSIZE)) {
- printf("native hsize_t");
+ printf("native hsize_t");
} else if (H5Tequal(type, H5T_NATIVE_HSSIZE)) {
- printf("native hssize_t");
+ printf("native hssize_t");
} else if (H5Tequal(type, H5T_NATIVE_HERR)) {
- printf("native herr_t");
+ printf("native herr_t");
} else if (H5Tequal(type, H5T_NATIVE_HBOOL)) {
- printf("native hbool_t");
+ printf("native hbool_t");
} else {
- return FALSE;
+ return FALSE;
}
return TRUE;
}
/*-------------------------------------------------------------------------
- * Function: display_ieee_type
+ * Function: display_ieee_type
*
- * Purpose: Print the name of an IEEE floating-point data type.
+ * Purpose: Print the name of an IEEE floating-point data type.
*
- * Return: Success: TRUE
+ * Return: Success: TRUE
*
- * Failure: FALSE, nothing printed
+ * Failure: FALSE, nothing printed
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, November 5, 1998
*
* Modifications:
@@ -413,30 +413,30 @@ static hbool_t
display_ieee_type(hid_t type, int UNUSED ind)
{
if (H5Tequal(type, H5T_IEEE_F32BE)) {
- printf("IEEE 32-bit big-endian float");
+ printf("IEEE 32-bit big-endian float");
} else if (H5Tequal(type, H5T_IEEE_F32LE)) {
- printf("IEEE 32-bit little-endian float");
+ printf("IEEE 32-bit little-endian float");
} else if (H5Tequal(type, H5T_IEEE_F64BE)) {
- printf("IEEE 64-bit big-endian float");
+ printf("IEEE 64-bit big-endian float");
} else if (H5Tequal(type, H5T_IEEE_F64LE)) {
- printf("IEEE 64-bit little-endian float");
+ printf("IEEE 64-bit little-endian float");
} else {
- return FALSE;
+ return FALSE;
}
return TRUE;
}
/*-------------------------------------------------------------------------
- * Function: display_precision
+ * Function: display_precision
*
- * Purpose: Prints information on the next line about precision and
- * padding if the precision is less than the total data type
- * size.
+ * Purpose: Prints information on the next line about precision and
+ * padding if the precision is less than the total data type
+ * size.
*
- * Return: void
+ * Return: void
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, November 5, 1998
*
* Modifications:
@@ -446,11 +446,11 @@ display_ieee_type(hid_t type, int UNUSED ind)
static void
display_precision(hid_t type, int ind)
{
- size_t prec; /*precision */
- H5T_pad_t plsb, pmsb; /*lsb and msb padding */
- const char *plsb_s=NULL; /*lsb padding string */
- const char *pmsb_s=NULL; /*msb padding string */
- size_t nbits; /*number of bits */
+ size_t prec; /*precision */
+ H5T_pad_t plsb, pmsb; /*lsb and msb padding */
+ const char *plsb_s=NULL; /*lsb padding string */
+ const char *pmsb_s=NULL; /*msb padding string */
+ size_t nbits; /*number of bits */
/*
* If the precision is less than the total size then show the precision
@@ -458,78 +458,78 @@ display_precision(hid_t type, int ind)
* information.
*/
if (8*H5Tget_size(type)!=(prec=H5Tget_precision(type))) {
- printf("\n%*s(%lu bit%s of precision beginning at bit %lu)",
- ind, "", (unsigned long)prec, 1==prec?"":"s",
- (unsigned long)H5Tget_offset(type));
-
- H5Tget_pad(type, &plsb, &pmsb);
- if (H5Tget_offset(type)>0) {
- switch (plsb) {
- case H5T_PAD_ZERO:
- plsb_s = "zero";
- break;
- case H5T_PAD_ONE:
- plsb_s = "one";
- break;
- case H5T_PAD_BACKGROUND:
- plsb_s = "bkg";
- break;
- case H5T_PAD_ERROR:
- case H5T_NPAD:
- plsb_s = "unknown";
- break;
- }
- }
- if (H5Tget_offset(type)+prec<8*H5Tget_size(type)) {
- switch (pmsb) {
- case H5T_PAD_ZERO:
- pmsb_s = "zero";
- break;
- case H5T_PAD_ONE:
- pmsb_s = "one";
- break;
- case H5T_PAD_BACKGROUND:
- pmsb_s = "bkg";
- break;
- case H5T_PAD_ERROR:
- case H5T_NPAD:
- pmsb_s = "unknown";
- break;
- }
- }
- if (plsb_s || pmsb_s) {
- printf("\n%*s(", ind, "");
- if (plsb_s) {
- nbits = H5Tget_offset(type);
- printf("%lu %s bit%s at bit 0",
- (unsigned long)nbits, plsb_s, 1==nbits?"":"s");
- }
- if (plsb_s && pmsb_s) printf(", ");
- if (pmsb_s) {
- nbits = 8*H5Tget_size(type)-(H5Tget_offset(type)+prec);
- printf("%lu %s bit%s at bit %lu",
- (unsigned long)nbits, pmsb_s, 1==nbits?"":"s",
- (unsigned long)(8*H5Tget_size(type)-nbits));
- }
- printf(")");
- }
+ printf("\n%*s(%lu bit%s of precision beginning at bit %lu)",
+ ind, "", (unsigned long)prec, 1==prec?"":"s",
+ (unsigned long)H5Tget_offset(type));
+
+ H5Tget_pad(type, &plsb, &pmsb);
+ if (H5Tget_offset(type)>0) {
+ switch (plsb) {
+ case H5T_PAD_ZERO:
+ plsb_s = "zero";
+ break;
+ case H5T_PAD_ONE:
+ plsb_s = "one";
+ break;
+ case H5T_PAD_BACKGROUND:
+ plsb_s = "bkg";
+ break;
+ case H5T_PAD_ERROR:
+ case H5T_NPAD:
+ plsb_s = "unknown";
+ break;
+ }
+ }
+ if (H5Tget_offset(type)+prec<8*H5Tget_size(type)) {
+ switch (pmsb) {
+ case H5T_PAD_ZERO:
+ pmsb_s = "zero";
+ break;
+ case H5T_PAD_ONE:
+ pmsb_s = "one";
+ break;
+ case H5T_PAD_BACKGROUND:
+ pmsb_s = "bkg";
+ break;
+ case H5T_PAD_ERROR:
+ case H5T_NPAD:
+ pmsb_s = "unknown";
+ break;
+ }
+ }
+ if (plsb_s || pmsb_s) {
+ printf("\n%*s(", ind, "");
+ if (plsb_s) {
+ nbits = H5Tget_offset(type);
+ printf("%lu %s bit%s at bit 0",
+ (unsigned long)nbits, plsb_s, 1==nbits?"":"s");
+ }
+ if (plsb_s && pmsb_s) printf(", ");
+ if (pmsb_s) {
+ nbits = 8*H5Tget_size(type)-(H5Tget_offset(type)+prec);
+ printf("%lu %s bit%s at bit %lu",
+ (unsigned long)nbits, pmsb_s, 1==nbits?"":"s",
+ (unsigned long)(8*H5Tget_size(type)-nbits));
+ }
+ printf(")");
+ }
}
}
/*-------------------------------------------------------------------------
- * Function: display_int_type
+ * Function: display_int_type
*
- * Purpose: Print the name of an integer data type. Common information
- * like number of bits, byte order, and sign scheme appear on
- * the first line. Additional information might appear in
- * parentheses on the following lines.
+ * Purpose: Print the name of an integer data type. Common information
+ * like number of bits, byte order, and sign scheme appear on
+ * the first line. Additional information might appear in
+ * parentheses on the following lines.
*
- * Return: Success: TRUE
+ * Return: Success: TRUE
*
- * Failure: FALSE, nothing printed
+ * Failure: FALSE, nothing printed
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, November 5, 1998
*
* Modifications:
@@ -539,40 +539,40 @@ display_precision(hid_t type, int ind)
static hbool_t
display_int_type(hid_t type, int ind)
{
- H5T_order_t order; /*byte order value */
- const char *order_s=NULL; /*byte order string */
- H5T_sign_t sign; /*sign scheme value */
- const char *sign_s=NULL; /*sign scheme string */
+ H5T_order_t order; /*byte order value */
+ const char *order_s=NULL; /*byte order string */
+ H5T_sign_t sign; /*sign scheme value */
+ const char *sign_s=NULL; /*sign scheme string */
if (H5T_INTEGER!=H5Tget_class(type)) return FALSE;
/* Byte order */
if (H5Tget_size(type)>1) {
- order = H5Tget_order(type);
- if (H5T_ORDER_LE==order) {
- order_s = " little-endian";
- } else if (H5T_ORDER_BE==order) {
- order_s = " big-endian";
- } else if (H5T_ORDER_VAX==order) {
- order_s = " mixed-endian";
- } else {
- order_s = " unknown-byte-order";
- }
+ order = H5Tget_order(type);
+ if (H5T_ORDER_LE==order) {
+ order_s = " little-endian";
+ } else if (H5T_ORDER_BE==order) {
+ order_s = " big-endian";
+ } else if (H5T_ORDER_VAX==order) {
+ order_s = " mixed-endian";
+ } else {
+ order_s = " unknown-byte-order";
+ }
} else {
- order_s = "";
+ order_s = "";
}
/* Sign */
if ((sign=H5Tget_sign(type))>=0) {
- if (H5T_SGN_NONE==sign) {
- sign_s = " unsigned";
- } else if (H5T_SGN_2==sign) {
- sign_s = "";
- } else {
- sign_s = " unknown-sign";
- }
+ if (H5T_SGN_NONE==sign) {
+ sign_s = " unsigned";
+ } else if (H5T_SGN_2==sign) {
+ sign_s = "";
+ } else {
+ sign_s = " unknown-sign";
+ }
} else {
- sign_s = " unknown-sign";
+ sign_s = " unknown-sign";
}
/*
@@ -580,22 +580,22 @@ display_int_type(hid_t type, int ind)
* information on the subsequent lines
*/
printf("%lu-bit%s%s integer",
- (unsigned long)(8*H5Tget_size(type)), order_s, sign_s);
+ (unsigned long)(8*H5Tget_size(type)), order_s, sign_s);
display_precision(type, ind);
return TRUE;
}
/*-------------------------------------------------------------------------
- * Function: display_float_type
+ * Function: display_float_type
*
- * Purpose: Print info about a floating point data type.
+ * Purpose: Print info about a floating point data type.
*
- * Return: Success: TRUE
+ * Return: Success: TRUE
*
- * Failure: FALSE, nothing printed
+ * Failure: FALSE, nothing printed
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, November 5, 1998
*
* Modifications:
@@ -605,33 +605,33 @@ display_int_type(hid_t type, int ind)
static hbool_t
display_float_type(hid_t type, int ind)
{
- H5T_order_t order; /*byte order value */
- const char *order_s=NULL; /*byte order string */
- size_t spos; /*sign bit position */
- size_t esize, epos; /*exponent size and position */
- size_t msize, mpos; /*significand size and position */
- size_t ebias; /*exponent bias */
- H5T_norm_t norm; /*significand normalization */
- const char *norm_s=NULL; /*normalization string */
- H5T_pad_t pad; /*internal padding value */
- const char *pad_s=NULL; /*internal padding string */
+ H5T_order_t order; /*byte order value */
+ const char *order_s=NULL; /*byte order string */
+ size_t spos; /*sign bit position */
+ size_t esize, epos; /*exponent size and position */
+ size_t msize, mpos; /*significand size and position */
+ size_t ebias; /*exponent bias */
+ H5T_norm_t norm; /*significand normalization */
+ const char *norm_s=NULL; /*normalization string */
+ H5T_pad_t pad; /*internal padding value */
+ const char *pad_s=NULL; /*internal padding string */
if (H5T_FLOAT!=H5Tget_class(type)) return FALSE;
/* Byte order */
if (H5Tget_size(type)>1) {
- order = H5Tget_order(type);
- if (H5T_ORDER_LE==order) {
- order_s = " little-endian";
- } else if (H5T_ORDER_BE==order) {
- order_s = " big-endian";
- } else if (H5T_ORDER_VAX==order) {
- order_s = " mixed-endian";
- } else {
- order_s = " unknown-byte-order";
- }
+ order = H5Tget_order(type);
+ if (H5T_ORDER_LE==order) {
+ order_s = " little-endian";
+ } else if (H5T_ORDER_BE==order) {
+ order_s = " big-endian";
+ } else if (H5T_ORDER_VAX==order) {
+ order_s = " mixed-endian";
+ } else {
+ order_s = " unknown-byte-order";
+ }
} else {
- order_s = "";
+ order_s = "";
}
/*
@@ -639,7 +639,7 @@ display_float_type(hid_t type, int ind)
* subsequent lines.
*/
printf("%lu-bit%s floating-point",
- (unsigned long)(8*H5Tget_size(type)), order_s);
+ (unsigned long)(8*H5Tget_size(type)), order_s);
display_precision(type, ind);
/* Print sizes, locations, and other information about each field */
@@ -648,60 +648,60 @@ display_float_type(hid_t type, int ind)
norm = H5Tget_norm(type);
switch (norm) {
case H5T_NORM_IMPLIED:
- norm_s = ", msb implied";
- break;
+ norm_s = ", msb implied";
+ break;
case H5T_NORM_MSBSET:
- norm_s = ", msb always set";
- break;
+ norm_s = ", msb always set";
+ break;
case H5T_NORM_NONE:
- norm_s = ", no normalization";
- break;
+ norm_s = ", no normalization";
+ break;
case H5T_NORM_ERROR:
- norm_s = ", unknown normalization";
- break;
+ norm_s = ", unknown normalization";
+ break;
}
printf("\n%*s(significant for %lu bit%s at bit %lu%s)", ind, "",
- (unsigned long)msize, 1==msize?"":"s", (unsigned long)mpos,
- norm_s);
+ (unsigned long)msize, 1==msize?"":"s", (unsigned long)mpos,
+ norm_s);
printf("\n%*s(exponent for %lu bit%s at bit %lu, bias is 0x%lx)",
- ind, "", (unsigned long)esize, 1==esize?"":"s",
- (unsigned long)epos, (unsigned long)ebias);
+ ind, "", (unsigned long)esize, 1==esize?"":"s",
+ (unsigned long)epos, (unsigned long)ebias);
printf("\n%*s(sign bit at %lu)", ind, "", (unsigned long)spos);
/* Display internal padding */
if (1+esize+msize<H5Tget_precision(type)) {
- pad = H5Tget_inpad(type);
- switch (pad) {
- case H5T_PAD_ZERO:
- pad_s = "zero";
- break;
- case H5T_PAD_ONE:
- pad_s = "one";
- break;
- case H5T_PAD_BACKGROUND:
- pad_s = "bkg";
- break;
- case H5T_PAD_ERROR:
- case H5T_NPAD:
- pad_s = "unknown";
- break;
- }
- printf("\n%*s(internal padding bits are %s)", ind, "", pad_s);
+ pad = H5Tget_inpad(type);
+ switch (pad) {
+ case H5T_PAD_ZERO:
+ pad_s = "zero";
+ break;
+ case H5T_PAD_ONE:
+ pad_s = "one";
+ break;
+ case H5T_PAD_BACKGROUND:
+ pad_s = "bkg";
+ break;
+ case H5T_PAD_ERROR:
+ case H5T_NPAD:
+ pad_s = "unknown";
+ break;
+ }
+ printf("\n%*s(internal padding bits are %s)", ind, "", pad_s);
}
return TRUE;
}
/*-------------------------------------------------------------------------
- * Function: display_cmpd_type
+ * Function: display_cmpd_type
*
- * Purpose: Print info about a compound data type.
+ * Purpose: Print info about a compound data type.
*
- * Return: Success: TRUE
+ * Return: Success: TRUE
*
- * Failure: FALSE, nothing printed
+ * Failure: FALSE, nothing printed
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, November 5, 1998
*
* Modifications:
@@ -711,10 +711,10 @@ display_float_type(hid_t type, int ind)
static hbool_t
display_cmpd_type(hid_t type, int ind)
{
- char *name=NULL; /*member name */
- size_t size; /*total size of type in bytes */
- hid_t subtype; /*member data type */
- int i, n; /*miscellaneous counters */
+ char *name=NULL; /*member name */
+ size_t size; /*total size of type in bytes */
+ hid_t subtype; /*member data type */
+ int i, n; /*miscellaneous counters */
if (H5T_COMPOUND!=H5Tget_class(type)) return FALSE;
@@ -736,21 +736,21 @@ display_cmpd_type(hid_t type, int ind)
}
size = H5Tget_size(type);
printf("\n%*s} %lu byte%s",
- ind, "", (unsigned long)size, 1==size?"":"s");
+ ind, "", (unsigned long)size, 1==size?"":"s");
return TRUE;
}
/*-------------------------------------------------------------------------
- * Function: display_enum_type
+ * Function: display_enum_type
*
- * Purpose: Print info about an enumeration data type.
+ * Purpose: Print info about an enumeration data type.
*
- * Return: Success: TRUE
+ * Return: Success: TRUE
*
- * Failure: FALSE, nothing printed
+ * Failure: FALSE, nothing printed
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Wednesday, December 23, 1998
*
* Modifications:
@@ -760,15 +760,15 @@ display_cmpd_type(hid_t type, int ind)
static hbool_t
display_enum_type(hid_t type, int ind)
{
- char **name=NULL; /*member names */
- unsigned char *value=NULL; /*value array */
- int nmembs; /*number of members */
- int nchars; /*number of output characters */
- hid_t super; /*enum base integer type */
- hid_t native=-1; /*native integer data type */
- size_t dst_size; /*destination value type size */
- int i; /*miscellaneous counters */
- size_t j;
+ char **name=NULL; /*member names */
+ unsigned char *value=NULL; /*value array */
+ int nmembs; /*number of members */
+ int nchars; /*number of output characters */
+ hid_t super; /*enum base integer type */
+ hid_t native=-1; /*native integer data type */
+ size_t dst_size; /*destination value type size */
+ int i; /*miscellaneous counters */
+ size_t j;
if (H5T_ENUM!=H5Tget_class(type)) return FALSE;
nmembs = H5Tget_nmembers(type);
@@ -781,18 +781,18 @@ display_enum_type(hid_t type, int ind)
* Determine what data type to use for the native values. To simplify
* things we entertain three possibilities:
* 1. long_long -- the largest native signed integer
- * 2. unsigned long_long -- the largest native unsigned integer
- * 3. raw format
+ * 2. unsigned long_long -- the largest native unsigned integer
+ * 3. raw format
*/
if (H5Tget_size(type)<=sizeof(long_long)) {
- dst_size = sizeof(long_long);
- if (H5T_SGN_NONE==H5Tget_sign(type)) {
- native = H5T_NATIVE_ULLONG;
- } else {
- native = H5T_NATIVE_LLONG;
- }
+ dst_size = sizeof(long_long);
+ if (H5T_SGN_NONE==H5Tget_sign(type)) {
+ native = H5T_NATIVE_ULLONG;
+ } else {
+ native = H5T_NATIVE_LLONG;
+ }
} else {
- dst_size = H5Tget_size(type);
+ dst_size = H5Tget_size(type);
}
/* Get the names and raw values of all members */
@@ -800,8 +800,8 @@ display_enum_type(hid_t type, int ind)
name = calloc((size_t)nmembs, sizeof(char*));
value = calloc((size_t)nmembs, MAX(H5Tget_size(type), dst_size));
for (i=0; i<nmembs; i++) {
- name[i] = H5Tget_member_name(type, i);
- H5Tget_member_value(type, i, value+i*H5Tget_size(type));
+ name[i] = H5Tget_member_name(type, i);
+ H5Tget_member_value(type, i, value+i*H5Tget_size(type));
}
/* Convert values to native data type */
@@ -812,22 +812,22 @@ display_enum_type(hid_t type, int ind)
/* Print members */
for (i=0; i<nmembs; i++) {
- printf("\n%*s", ind+4, "");
- nchars = display_string(stdout, name[i], TRUE);
- printf("%*s = ", MAX(0, 16-nchars), "");
-
- if (native<0) {
- printf("0x");
- for (j=0; j<dst_size; j++) {
- printf("%02x", value[i*dst_size+j]);
- }
- } else if (H5T_SGN_NONE==H5Tget_sign(native)) {
- HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"u",
- *((unsigned long_long*)((void*)(value+i*dst_size))));
- } else {
- HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"d",
- *((long_long*)((void*)(value+i*dst_size))));
- }
+ printf("\n%*s", ind+4, "");
+ nchars = display_string(stdout, name[i], TRUE);
+ printf("%*s = ", MAX(0, 16-nchars), "");
+
+ if (native<0) {
+ printf("0x");
+ for (j=0; j<dst_size; j++) {
+ printf("%02x", value[i*dst_size+j]);
+ }
+ } else if (H5T_SGN_NONE==H5Tget_sign(native)) {
+ HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"u",
+ *((unsigned long_long*)((void*)(value+i*dst_size))));
+ } else {
+ HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"d",
+ *((long_long*)((void*)(value+i*dst_size))));
+ }
}
/* Release resources */
@@ -843,15 +843,15 @@ display_enum_type(hid_t type, int ind)
/*-------------------------------------------------------------------------
- * Function: display_string_type
+ * Function: display_string_type
*
- * Purpose: Print information about a string data type.
+ * Purpose: Print information about a string data type.
*
- * Return: Success: TRUE
+ * Return: Success: TRUE
*
- * Failure: FALSE, nothing printed
+ * Failure: FALSE, nothing printed
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, November 5, 1998
*
* Modifications:
@@ -861,10 +861,10 @@ display_enum_type(hid_t type, int ind)
static hbool_t
display_string_type(hid_t type, int UNUSED ind)
{
- H5T_str_t pad;
- const char *pad_s=NULL;
- H5T_cset_t cset;
- const char *cset_s=NULL;
+ H5T_str_t pad;
+ const char *pad_s=NULL;
+ H5T_cset_t cset;
+ const char *cset_s=NULL;
if (H5T_STRING!=H5Tget_class(type)) return FALSE;
@@ -872,14 +872,14 @@ display_string_type(hid_t type, int UNUSED ind)
pad = H5Tget_strpad(type);
switch (pad) {
case H5T_STR_NULLTERM:
- pad_s = "null-terminated";
- break;
+ pad_s = "null-terminated";
+ break;
case H5T_STR_NULLPAD:
- pad_s = "null-padded";
- break;
+ pad_s = "null-padded";
+ break;
case H5T_STR_SPACEPAD:
- pad_s = "space-padded";
- break;
+ pad_s = "space-padded";
+ break;
case H5T_STR_RESERVED_3:
case H5T_STR_RESERVED_4:
case H5T_STR_RESERVED_5:
@@ -894,16 +894,16 @@ display_string_type(hid_t type, int UNUSED ind)
case H5T_STR_RESERVED_14:
case H5T_STR_RESERVED_15:
case H5T_STR_ERROR:
- pad_s = "unknown-format";
- break;
+ pad_s = "unknown-format";
+ break;
}
/* Character set */
cset = H5Tget_cset(type);
switch (cset) {
case H5T_CSET_ASCII:
- cset_s = "ASCII";
- break;
+ cset_s = "ASCII";
+ break;
case H5T_CSET_RESERVED_1:
case H5T_CSET_RESERVED_2:
case H5T_CSET_RESERVED_3:
@@ -920,31 +920,31 @@ display_string_type(hid_t type, int UNUSED ind)
case H5T_CSET_RESERVED_14:
case H5T_CSET_RESERVED_15:
case H5T_CSET_ERROR:
- cset_s = "unknown-character-set";
- break;
+ cset_s = "unknown-character-set";
+ break;
}
printf("%lu-byte %s %s string",
- (unsigned long)H5Tget_size(type), pad_s, cset_s);
+ (unsigned long)H5Tget_size(type), pad_s, cset_s);
return TRUE;
}
/*-------------------------------------------------------------------------
- * Function: display_reference_type
+ * Function: display_reference_type
*
- * Purpose: Prints information about a reference data type.
+ * Purpose: Prints information about a reference data type.
*
- * Return: Success: TRUE
+ * Return: Success: TRUE
*
- * Failure: FALSE, nothing printed
+ * Failure: FALSE, nothing printed
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, November 5, 1998
*
* Modifications:
- * Robb Matzke, 1999-06-04
- * Knows about object and dataset region references.
+ * Robb Matzke, 1999-06-04
+ * Knows about object and dataset region references.
*
*-------------------------------------------------------------------------
*/
@@ -954,12 +954,12 @@ display_reference_type(hid_t type, int UNUSED ind)
if (H5T_REFERENCE!=H5Tget_class(type)) return FALSE;
if (H5Tequal(type, H5T_STD_REF_OBJ)) {
- printf("object reference");
+ printf("object reference");
} else if (H5Tequal(type, H5T_STD_REF_DSETREG)) {
- printf("dataset region reference");
+ printf("dataset region reference");
} else {
- printf("%lu-byte unknown reference",
- (unsigned long)H5Tget_size(type));
+ printf("%lu-byte unknown reference",
+ (unsigned long)H5Tget_size(type));
}
return TRUE;
@@ -967,15 +967,15 @@ display_reference_type(hid_t type, int UNUSED ind)
/*-------------------------------------------------------------------------
- * Function: display_opaque_type
+ * Function: display_opaque_type
*
- * Purpose: Prints information about an opaque data type.
+ * Purpose: Prints information about an opaque data type.
*
- * Return: Success: TRUE
+ * Return: Success: TRUE
*
- * Failure: FALSE, nothing printed
+ * Failure: FALSE, nothing printed
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Monday, June 7, 1999
*
* Modifications:
@@ -985,18 +985,18 @@ display_reference_type(hid_t type, int UNUSED ind)
static hbool_t
display_opaque_type(hid_t type, int ind)
{
- char *tag;
- size_t size;
+ char *tag;
+ size_t size;
if (H5T_OPAQUE!=H5Tget_class(type)) return FALSE;
size = H5Tget_size(type);
printf("%lu-byte opaque type", (unsigned long)size);
if ((tag=H5Tget_tag(type))) {
- printf("\n%*s(tag = \"", ind, "");
- display_string(stdout, tag, FALSE);
- printf("\")");
- free(tag);
+ printf("\n%*s(tag = \"", ind, "");
+ display_string(stdout, tag, FALSE);
+ printf("\")");
+ free(tag);
}
return TRUE;
}
@@ -1087,130 +1087,177 @@ display_array_type(hid_t type, int ind)
H5Tclose(super);
return TRUE;
}
-
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_bitfield_type
+ *
+ * Purpose: Print information about a bitfield type.
+ *
+ * Return: Success: TRUE
+ *
+ * Failure: FALSE, nothing printed
+ *
+ * Programmer: Pedro Vicente
+ * Tuesday, May 20, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_bitfield_type(hid_t type, int UNUSED ind)
+{
+
+ if (H5T_BITFIELD!=H5Tget_class(type)) return FALSE;
+
+ if (H5Tequal(type, H5T_STD_B8BE)) {
+ printf("8-bit bitfield big-endian");
+ } else if (H5Tequal(type, H5T_STD_B8LE)) {
+ printf("8-bit bitfield little-endian");
+ } else if (H5Tequal(type, H5T_STD_B16BE)) {
+ printf("16-bit bitfield big-endian");
+ } else if (H5Tequal(type, H5T_STD_B16LE)) {
+ printf("16-bit bitfield little-endian");
+ } else if (H5Tequal(type, H5T_STD_B32BE)) {
+ printf("32-bit bitfield big-endian");
+ } else if (H5Tequal(type, H5T_STD_B32LE)) {
+ printf("32-bit bitfield little-endian");
+ } else if (H5Tequal(type, H5T_STD_B64BE)) {
+ printf("64-bit bitfield big-endian");
+ } else if (H5Tequal(type, H5T_STD_B64LE)) {
+ printf("64-bit bitfield little-endian");
+ } else {
+ printf("user defined bitfield");
+ }
+ return TRUE;
+}
+
+
/*-------------------------------------------------------------------------
- * Function: display_type
+ * Function: display_type
*
- * Purpose: Prints a data type definition. The definition is printed
- * without any leading space or trailing line-feed (although
- * there might be line-feeds inside the type definition). The
- * first line is assumed to have IND characters before it on
- * the same line (printed by the caller).
+ * Purpose: Prints a data type definition. The definition is printed
+ * without any leading space or trailing line-feed (although
+ * there might be line-feeds inside the type definition). The
+ * first line is assumed to have IND characters before it on
+ * the same line (printed by the caller).
*
- * Return: void
+ * Return: void
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, November 5, 1998
*
* Modifications:
- * Robb Matzke, 1999-06-11
- * Prints the OID of shared data types.
+ * Robb Matzke, 1999-06-11
+ * Prints the OID of shared data types.
*
*-------------------------------------------------------------------------
*/
static void
display_type(hid_t type, int ind)
{
- H5T_class_t data_class = H5Tget_class(type);
- H5G_stat_t sb;
+ H5T_class_t data_class = H5Tget_class(type);
+ H5G_stat_t sb;
/* Bad data type */
if (type<0) {
- printf("<ERROR>");
- return;
+ printf("<ERROR>");
+ return;
}
/* Shared? If so then print the type's OID */
if (H5Tcommitted(type)) {
- if (H5Gget_objinfo(type, ".", FALSE, &sb)>=0) {
- printf("shared-%lu:%lu:%lu:%lu ",
- sb.fileno[1], sb.fileno[0],
- sb.objno[1], sb.objno[0]);
- } else {
- printf("shared ");
- }
+ if (H5Gget_objinfo(type, ".", FALSE, &sb)>=0) {
+ printf("shared-%lu:%lu:%lu:%lu ",
+ sb.fileno[1], sb.fileno[0],
+ sb.objno[1], sb.objno[0]);
+ } else {
+ printf("shared ");
+ }
}
/* Print the type */
- if (display_native_type(type, ind) ||
- display_ieee_type(type, ind) ||
- display_int_type(type, ind) ||
- display_float_type(type, ind) ||
- display_cmpd_type(type, ind) ||
- display_enum_type(type, ind) ||
- display_string_type(type, ind) ||
- display_reference_type(type, ind) ||
- display_vlen_type(type, ind) ||
- display_array_type(type, ind) ||
- display_opaque_type(type, ind)) {
- return;
+ if ((!simple_output_g && display_native_type(type, ind)) ||
+ display_ieee_type(type, ind) ||
+ display_int_type(type, ind) ||
+ display_float_type(type, ind) ||
+ display_cmpd_type(type, ind) ||
+ display_enum_type(type, ind) ||
+ display_string_type(type, ind) ||
+ display_reference_type(type, ind) ||
+ display_vlen_type(type, ind) ||
+ display_array_type(type, ind) ||
+ display_opaque_type(type, ind) ||
+ display_bitfield_type(type, ind)) {
+ return;
}
/* Unknown type */
printf("%lu-byte class-%u unknown",
- (unsigned long)H5Tget_size(type),
- (unsigned)data_class);
+ (unsigned long)H5Tget_size(type),
+ (unsigned)data_class);
}
/*-------------------------------------------------------------------------
- * Function: dump_dataset_values
+ * Function: dump_dataset_values
*
- * Purpose: Prints all values of a dataset.
+ * Purpose: Prints all values of a dataset.
*
- * Return: void
+ * Return: void
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* 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.
+ * 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
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];
+ hid_t f_type = H5Dget_type(dset);
+ size_t size = H5Tget_size(f_type);
+ h5dump_t info;
+ char string_prefix[64];
static char fmt_double[16], fmt_float[16];
-
+
/* Set to all default values and then override */
memset(&info, 0, sizeof info);
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;
-
+ 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;
+ 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;
}
/* Floating point types should display full precision */
@@ -1231,23 +1278,23 @@ dump_dataset_values(hid_t dset)
info.line_indent = "";
if (hexdump_g) {
- /*
- * Print all data in hexadecimal format if the `-x' or `--hexdump'
- * command line switch was given.
- */
- info.raw = TRUE;
+ /*
+ * Print all data in hexadecimal format if the `-x' or `--hexdump'
+ * command line switch was given.
+ */
+ info.raw = TRUE;
} else if (string_g && 1==size && H5T_INTEGER==H5Tget_class(f_type)) {
- /*
- * Print 1-byte integer data as an ASCI character string instead of
- * integers if the `-s' or `--string' command-line option was given.
- */
- info.ascii = TRUE;
- info.elmt_suf1 = "";
- info.elmt_suf2 = "";
- strcpy(string_prefix, info.line_pre);
- strcat(string_prefix, "\"");
- info.line_pre = string_prefix;
- info.line_suf = "\"";
+ /*
+ * Print 1-byte integer data as an ASCI character string instead of
+ * integers if the `-s' or `--string' command-line option was given.
+ */
+ info.ascii = TRUE;
+ info.elmt_suf1 = "";
+ info.elmt_suf2 = "";
+ strcpy(string_prefix, info.line_pre);
+ strcat(string_prefix, "\"");
+ info.line_pre = string_prefix;
+ info.line_suf = "\"";
}
/*
@@ -1255,7 +1302,7 @@ dump_dataset_values(hid_t dset)
*/
printf(" Data:\n");
if (h5tools_dump_dset(stdout, &info, dset, -1, NULL, -1) < 0) {
- printf(" Unable to print data.\n");
+ printf(" Unable to print data.\n");
}
H5Tclose(f_type);
@@ -1263,15 +1310,15 @@ dump_dataset_values(hid_t dset)
/*-------------------------------------------------------------------------
- * Function: list_attr
+ * Function: list_attr
*
- * Purpose: Prints information about attributes.
+ * Purpose: Prints information about attributes.
*
- * Return: Success: 0
+ * Return: Success: 0
*
- * Failure: -1
+ * Failure: -1
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Friday, June 5, 1998
*
* Modifications:
@@ -1281,93 +1328,93 @@ dump_dataset_values(hid_t dset)
static herr_t
list_attr (hid_t obj, const char *attr_name, void UNUSED *op_data)
{
- hid_t attr, space, type, p_type;
- hsize_t size[64], nelmts=1;
- int ndims, i, n;
- size_t need;
+ hid_t attr, space, type, p_type;
+ hsize_t size[64], nelmts=1;
+ int ndims, i, n;
+ size_t need;
hsize_t temp_need;
- void *buf;
- h5dump_t info;
+ void *buf;
+ h5dump_t info;
printf(" Attribute: ");
n = display_string(stdout, attr_name, TRUE);
printf("%*s", MAX(0, 9-n), "");
if ((attr = H5Aopen_name(obj, attr_name))) {
- space = H5Aget_space(attr);
- type = H5Aget_type(attr);
-
- /* Data space */
- ndims = H5Sget_simple_extent_dims(space, size, NULL);
- if (0==ndims) {
- puts(" scalar");
- } else {
- printf(" {");
- for (i=0; i<ndims; i++) {
- HDfprintf(stdout, "%s%Hu", i?", ":"", size[i]);
- nelmts *= size[i];
- }
- puts("}");
- }
-
- /* Data type */
- printf(" Type: ");
- display_type(type, 15);
- putchar('\n');
-
- /* Data */
- memset(&info, 0, sizeof info);
- info.line_multi_new = 1;
- if (nelmts<5) {
- info.idx_fmt = "";
- 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=";
- if (string_g && 1==H5Tget_size(type) &&
- H5T_INTEGER==H5Tget_class(type)) {
- info.ascii = TRUE;
- info.elmt_suf1 = "";
- info.elmt_suf2 = "";
- info.idx_fmt = "(%s)";
- info.line_pre = " %s \"";
- info.line_suf = "\"";
- }
- /* values of type reference */
- info.obj_format = "-%lu:%lu:%lu:%lu";
+ space = H5Aget_space(attr);
+ type = H5Aget_type(attr);
+
+ /* Data space */
+ ndims = H5Sget_simple_extent_dims(space, size, NULL);
+ if (0==ndims) {
+ puts(" scalar");
+ } else {
+ printf(" {");
+ for (i=0; i<ndims; i++) {
+ HDfprintf(stdout, "%s%Hu", i?", ":"", size[i]);
+ nelmts *= size[i];
+ }
+ puts("}");
+ }
+
+ /* Data type */
+ printf(" Type: ");
+ display_type(type, 15);
+ putchar('\n');
+
+ /* Data */
+ memset(&info, 0, sizeof info);
+ info.line_multi_new = 1;
+ if (nelmts<5) {
+ info.idx_fmt = "";
+ 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=";
+ if (string_g && 1==H5Tget_size(type) &&
+ H5T_INTEGER==H5Tget_class(type)) {
+ info.ascii = TRUE;
+ info.elmt_suf1 = "";
+ info.elmt_suf2 = "";
+ info.idx_fmt = "(%s)";
+ info.line_pre = " %s \"";
+ info.line_suf = "\"";
+ }
+ /* values of type reference */
+ info.obj_format = "-%lu:%lu:%lu:%lu";
info.obj_hidefileno = 0;
- if (hexdump_g) {
- p_type = H5Tcopy(type);
- } else {
- p_type = h5tools_fixtype(type);
- }
- if (p_type>=0) {
+ if (hexdump_g) {
+ p_type = H5Tcopy(type);
+ } else {
+ p_type = h5tools_fixtype(type);
+ }
+ if (p_type>=0) {
temp_need= nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type));
assert(temp_need==(hsize_t)((size_t)temp_need));
need = (size_t)temp_need;
- buf = malloc(need);
- assert(buf);
- if (H5Aread(attr, p_type, buf)>=0) {
- h5tools_dump_mem(stdout, &info, attr, p_type, space, buf, -1);
- }
- free(buf);
- H5Tclose(p_type);
- }
-
- H5Sclose(space);
- H5Tclose(type);
- H5Aclose(attr);
+ buf = malloc(need);
+ assert(buf);
+ if (H5Aread(attr, p_type, buf)>=0) {
+ h5tools_dump_mem(stdout, &info, attr, p_type, space, buf, -1);
+ }
+ free(buf);
+ H5Tclose(p_type);
+ }
+
+ H5Sclose(space);
+ H5Tclose(type);
+ H5Aclose(attr);
} else {
- putchar('\n');
+ putchar('\n');
}
return 0;
@@ -1375,18 +1422,18 @@ list_attr (hid_t obj, const char *attr_name, void UNUSED *op_data)
/*-------------------------------------------------------------------------
- * Function: dataset_list1
+ * Function: dataset_list1
*
- * Purpose: List information about a dataset which should appear on the
- * same line as the dataset name. This information will precede
- * information which is applicable to all objects which will be
- * printed by the caller.
+ * Purpose: List information about a dataset which should appear on the
+ * same line as the dataset name. This information will precede
+ * information which is applicable to all objects which will be
+ * printed by the caller.
*
- * Return: Success: 0
+ * Return: Success: 0
*
- * Failure: -1
+ * Failure: -1
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, August 27, 1998
*
* Modifications:
@@ -1396,11 +1443,11 @@ list_attr (hid_t obj, const char *attr_name, void UNUSED *op_data)
static herr_t
dataset_list1(hid_t dset)
{
- hsize_t cur_size[64]; /*current dataset dimensions */
- hsize_t max_size[64]; /*maximum dataset dimensions */
- hid_t space; /*data space */
- int ndims; /*dimensionality */
- int i;
+ hsize_t cur_size[64]; /*current dataset dimensions */
+ hsize_t max_size[64]; /*maximum dataset dimensions */
+ hid_t space; /*data space */
+ int ndims; /*dimensionality */
+ int i;
/*
* Information that goes on the same row as the name. The name has
@@ -1410,12 +1457,12 @@ dataset_list1(hid_t dset)
ndims = H5Sget_simple_extent_dims(space, cur_size, max_size);
printf (" {");
for (i=0; i<ndims; i++) {
- HDfprintf (stdout, "%s%Hu", i?", ":"", cur_size[i]);
- if (max_size[i]==H5S_UNLIMITED) {
- HDfprintf (stdout, "/%s", "Inf");
- } else if (max_size[i]!=cur_size[i] || verbose_g>0) {
- HDfprintf(stdout, "/%Hu", max_size[i]);
- }
+ HDfprintf (stdout, "%s%Hu", i?", ":"", cur_size[i]);
+ if (max_size[i]==H5S_UNLIMITED) {
+ HDfprintf (stdout, "/%s", "Inf");
+ } else if (max_size[i]!=cur_size[i] || verbose_g>0) {
+ HDfprintf(stdout, "/%Hu", max_size[i]);
+ }
}
if (0==ndims) printf("SCALAR");
putchar('}');
@@ -1426,16 +1473,16 @@ dataset_list1(hid_t dset)
/*-------------------------------------------------------------------------
- * Function: dataset_list2
+ * Function: dataset_list2
*
- * Purpose: List information about a dataset which should appear after
- * information which is general to all objects.
+ * Purpose: List information about a dataset which should appear after
+ * information which is general to all objects.
*
- * Return: Success: 0
+ * Return: Success: 0
*
- * Failure: -1
+ * Failure: -1
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, August 27, 1998
*
* Modifications:
@@ -1445,136 +1492,136 @@ dataset_list1(hid_t dset)
static herr_t
dataset_list2(hid_t dset, const char UNUSED *name)
{
- hid_t dcpl; /*dataset creation property list*/
- hid_t type; /*data type of dataset */
- hid_t space; /*data space of dataset */
- int nf; /*number of filters */
- unsigned filt_flags; /*filter flags */
- H5Z_filter_t filt_id; /*filter identification number */
- unsigned cd_values[20]; /*filter client data values */
- size_t cd_nelmts; /*filter client number of values*/
- size_t cd_num; /*filter client data counter */
- char f_name[256]; /*filter/file name */
- char s[64]; /*temporary string buffer */
- off_t f_offset; /*offset in external file */
- hsize_t f_size; /*bytes used in external file */
- hsize_t total, used; /*total size or offset */
- hsize_t chsize[64]; /*chunk size in elements */
- int ndims; /*dimensionality */
- int n, max_len; /*max extern file name length */
- double utilization; /*percent utilization of storage*/
- int i;
+ hid_t dcpl; /*dataset creation property list*/
+ hid_t type; /*data type of dataset */
+ hid_t space; /*data space of dataset */
+ int nf; /*number of filters */
+ unsigned filt_flags; /*filter flags */
+ H5Z_filter_t filt_id; /*filter identification number */
+ unsigned cd_values[20]; /*filter client data values */
+ size_t cd_nelmts; /*filter client number of values*/
+ size_t cd_num; /*filter client data counter */
+ char f_name[256]; /*filter/file name */
+ char s[64]; /*temporary string buffer */
+ off_t f_offset; /*offset in external file */
+ hsize_t f_size; /*bytes used in external file */
+ hsize_t total, used; /*total size or offset */
+ hsize_t chsize[64]; /*chunk size in elements */
+ int ndims; /*dimensionality */
+ int n, max_len; /*max extern file name length */
+ double utilization; /*percent utilization of storage*/
+ int i;
if (verbose_g>0) {
- dcpl = H5Dget_create_plist(dset);
- space = H5Dget_space(dset);
- type = H5Dget_type(dset);
-
- /* Print information about chunked storage */
- if (H5D_CHUNKED==H5Pget_layout(dcpl)) {
- ndims = H5Pget_chunk(dcpl, NELMTS(chsize), chsize/*out*/);
- printf(" %-10s {", "Chunks:");
- total = H5Tget_size(type);
- for (i=0; i<ndims; i++) {
- printf("%s%lu", i?", ":"", (unsigned long)(chsize[i]));
- total *= chsize[i];
- }
- printf("} %lu bytes\n", (unsigned long)total);
- }
-
- /* Print total raw storage size */
- used = H5Sget_simple_extent_npoints(space) * H5Tget_size(type);
- total = H5Dget_storage_size(dset);
- printf(" %-10s ", "Storage:");
- printf("%lu logical byte%s, %lu allocated byte%s",
- (unsigned long)used, 1==used?"":"s",
- (unsigned long)total, 1==total?"":"s");
- if (total>0) {
+ dcpl = H5Dget_create_plist(dset);
+ space = H5Dget_space(dset);
+ type = H5Dget_type(dset);
+
+ /* Print information about chunked storage */
+ if (H5D_CHUNKED==H5Pget_layout(dcpl)) {
+ ndims = H5Pget_chunk(dcpl, NELMTS(chsize), chsize/*out*/);
+ printf(" %-10s {", "Chunks:");
+ total = H5Tget_size(type);
+ for (i=0; i<ndims; i++) {
+ printf("%s%lu", i?", ":"", (unsigned long)(chsize[i]));
+ total *= chsize[i];
+ }
+ printf("} %lu bytes\n", (unsigned long)total);
+ }
+
+ /* Print total raw storage size */
+ used = H5Sget_simple_extent_npoints(space) * H5Tget_size(type);
+ total = H5Dget_storage_size(dset);
+ printf(" %-10s ", "Storage:");
+ printf("%lu logical byte%s, %lu allocated byte%s",
+ (unsigned long)used, 1==used?"":"s",
+ (unsigned long)total, 1==total?"":"s");
+ if (total>0) {
#ifdef WIN32
- hsize_t mask = (hsize_t)1 << (8*sizeof(hsize_t)-1);
- if ((used & mask) || (total & mask)) {
- total = 0; /*prevent utilization printing*/
- } else {
- utilization = (hssize_t)used*100.0 /(hssize_t)total;
- }
+ hsize_t mask = (hsize_t)1 << (8*sizeof(hsize_t)-1);
+ if ((used & mask) || (total & mask)) {
+ total = 0; /*prevent utilization printing*/
+ } else {
+ utilization = (hssize_t)used*100.0 /(hssize_t)total;
+ }
#else
- utilization = (used*100.0)/total;
+ utilization = (used*100.0)/total;
#endif
- printf(", %1.2f%% utilization", utilization/*(used*100.0)/total*/);
- }
- putchar('\n');
-
- /* Print information about external strorage */
- if ((nf = H5Pget_external_count(dcpl))>0) {
- for (i=0, max_len=0; i<nf; i++) {
- H5Pget_external(dcpl, i, sizeof(f_name), f_name, NULL, NULL);
- n = display_string(NULL, f_name, TRUE);
- max_len = MAX(max_len, n);
- }
- printf(" %-10s %d external file%s\n",
- "Extern:", nf, 1==nf?"":"s");
- printf(" %4s %10s %10s %10s %s\n",
- "ID", "DSet-Addr", "File-Addr", "Bytes", "File");
- printf(" %4s %10s %10s %10s ",
- "----", "----------", "----------", "----------");
- for (i=0; i<max_len; i++) putchar('-');
- putchar('\n');
- for (i=0, total=0; i<nf; i++) {
- if (H5Pget_external(dcpl, i, sizeof(f_name), f_name, &f_offset,
- &f_size)<0) {
- HDfprintf(stdout,
- " #%03d %10Hu %10s %10s ***ERROR*** %s\n",
- i, total, "", "",
- i+1<nf?"Following addresses are incorrect":"");
- } else if (H5S_UNLIMITED==f_size) {
- HDfprintf(stdout, " #%03d %10Hu %10Hu %10s ",
- i, total, (hsize_t)f_offset, "INF");
- display_string(stdout, f_name, TRUE);
- } else {
- HDfprintf(stdout, " #%03d %10Hu %10Hu %10Hu ",
- i, total, (hsize_t)f_offset, f_size);
- display_string(stdout, f_name, TRUE);
- }
- putchar('\n');
- total += f_size;
- }
- printf(" %4s %10s %10s %10s ",
- "----", "----------", "----------", "----------");
- for (i=0; i<max_len; i++) putchar('-');
- putchar('\n');
- }
-
- /* Print information about raw data filters */
- if ((nf = H5Pget_nfilters(dcpl))>0) {
- for (i=0; i<nf; i++) {
- cd_nelmts = NELMTS(cd_values);
- filt_id = H5Pget_filter(dcpl, i, &filt_flags, &cd_nelmts,
- cd_values, sizeof(f_name), f_name);
- f_name[sizeof(f_name)-1] = '\0';
- sprintf(s, "Filter-%d:", i);
- printf(" %-10s %s-%u %s {", s,
- f_name[0]?f_name:"method",
- (unsigned)filt_id,
- filt_flags & H5Z_FLAG_OPTIONAL?"OPT":"");
- for (cd_num=0; cd_num<cd_nelmts; cd_num++) {
- printf("%s%u", cd_num?", ":"", cd_values[cd_num]);
- }
- printf("}\n");
- }
- }
-
- /* Print data type */
- printf(" %-10s ", "Type:");
- display_type(type, 15);
- printf("\n");
-
- /* Print address information */
- if (address_g) H5Ddebug(dset, 0);
-
- /* Close stuff */
- H5Tclose(type);
- H5Sclose(space);
- H5Pclose(dcpl);
+ printf(", %1.2f%% utilization", utilization/*(used*100.0)/total*/);
+ }
+ putchar('\n');
+
+ /* Print information about external strorage */
+ if ((nf = H5Pget_external_count(dcpl))>0) {
+ for (i=0, max_len=0; i<nf; i++) {
+ H5Pget_external(dcpl, i, sizeof(f_name), f_name, NULL, NULL);
+ n = display_string(NULL, f_name, TRUE);
+ max_len = MAX(max_len, n);
+ }
+ printf(" %-10s %d external file%s\n",
+ "Extern:", nf, 1==nf?"":"s");
+ printf(" %4s %10s %10s %10s %s\n",
+ "ID", "DSet-Addr", "File-Addr", "Bytes", "File");
+ printf(" %4s %10s %10s %10s ",
+ "----", "----------", "----------", "----------");
+ for (i=0; i<max_len; i++) putchar('-');
+ putchar('\n');
+ for (i=0, total=0; i<nf; i++) {
+ if (H5Pget_external(dcpl, i, sizeof(f_name), f_name, &f_offset,
+ &f_size)<0) {
+ HDfprintf(stdout,
+ " #%03d %10Hu %10s %10s ***ERROR*** %s\n",
+ i, total, "", "",
+ i+1<nf?"Following addresses are incorrect":"");
+ } else if (H5S_UNLIMITED==f_size) {
+ HDfprintf(stdout, " #%03d %10Hu %10Hu %10s ",
+ i, total, (hsize_t)f_offset, "INF");
+ display_string(stdout, f_name, TRUE);
+ } else {
+ HDfprintf(stdout, " #%03d %10Hu %10Hu %10Hu ",
+ i, total, (hsize_t)f_offset, f_size);
+ display_string(stdout, f_name, TRUE);
+ }
+ putchar('\n');
+ total += f_size;
+ }
+ printf(" %4s %10s %10s %10s ",
+ "----", "----------", "----------", "----------");
+ for (i=0; i<max_len; i++) putchar('-');
+ putchar('\n');
+ }
+
+ /* Print information about raw data filters */
+ if ((nf = H5Pget_nfilters(dcpl))>0) {
+ for (i=0; i<nf; i++) {
+ cd_nelmts = NELMTS(cd_values);
+ filt_id = H5Pget_filter(dcpl, i, &filt_flags, &cd_nelmts,
+ cd_values, sizeof(f_name), f_name);
+ f_name[sizeof(f_name)-1] = '\0';
+ sprintf(s, "Filter-%d:", i);
+ printf(" %-10s %s-%u %s {", s,
+ f_name[0]?f_name:"method",
+ (unsigned)filt_id,
+ filt_flags & H5Z_FLAG_OPTIONAL?"OPT":"");
+ for (cd_num=0; cd_num<cd_nelmts; cd_num++) {
+ printf("%s%u", cd_num?", ":"", cd_values[cd_num]);
+ }
+ printf("}\n");
+ }
+ }
+
+ /* Print data type */
+ printf(" %-10s ", "Type:");
+ display_type(type, 15);
+ printf("\n");
+
+ /* Print address information */
+ if (address_g) H5Ddebug(dset, 0);
+
+ /* Close stuff */
+ H5Tclose(type);
+ H5Sclose(space);
+ H5Pclose(dcpl);
}
if (data_g) dump_dataset_values(dset);
@@ -1583,16 +1630,16 @@ dataset_list2(hid_t dset, const char UNUSED *name)
/*-------------------------------------------------------------------------
- * Function: group_list2
+ * Function: group_list2
*
- * Purpose: List information about a group which should appear after
- * information which is general to all objects.
+ * Purpose: List information about a group which should appear after
+ * information which is general to all objects.
*
- * Return: Success: 0
+ * Return: Success: 0
*
- * Failure: -1
+ * Failure: -1
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, January 21, 1999
*
* Modifications:
@@ -1602,27 +1649,27 @@ dataset_list2(hid_t dset, const char UNUSED *name)
static herr_t
group_list2(hid_t grp, const char *name)
{
- iter_t iter;
+ iter_t iter;
if (recursive_g) {
- iter.container = name;
- H5Giterate(grp, ".", NULL, list, &iter);
+ iter.container = name;
+ H5Giterate(grp, ".", NULL, list, &iter);
}
return 0;
}
/*-------------------------------------------------------------------------
- * Function: datatype_list2
+ * Function: datatype_list2
*
- * Purpose: List information about a data type which should appear after
- * information which is general to all objects.
+ * Purpose: List information about a data type which should appear after
+ * information which is general to all objects.
*
- * Return: Success: 0
+ * Return: Success: 0
*
- * Failure: -1
+ * Failure: -1
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, November 5, 1998
*
* Modifications:
@@ -1633,27 +1680,27 @@ static herr_t
datatype_list2(hid_t type, const char UNUSED *name)
{
if (verbose_g>0) {
- printf(" %-10s ", "Type:");
- display_type(type, 15);
- printf("\n");
+ printf(" %-10s ", "Type:");
+ display_type(type, 15);
+ printf("\n");
}
return 0;
}
/*-------------------------------------------------------------------------
- * Function: link_open
+ * Function: link_open
*
- * Purpose: This gets called to open a symbolic link. Since symbolic
- * links don't correspond to actual objects we simply print the
- * link information and return failure.
+ * Purpose: This gets called to open a symbolic link. Since symbolic
+ * links don't correspond to actual objects we simply print the
+ * link information and return failure.
*
- * Return: Success: 0 - an invalid object but successful return
- * of this function.
+ * Return: Success: 0 - an invalid object but successful return
+ * of this function.
*
- * Failure: -1
+ * Failure: -1
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, August 27, 1998
*
* Modifications:
@@ -1663,11 +1710,11 @@ datatype_list2(hid_t type, const char UNUSED *name)
static hid_t
link_open(hid_t location, const char *name)
{
- char buf[64];
+ char buf[64];
if (H5Gget_linkval (location, name, sizeof(buf), buf)<0) return -1;
if (NULL==HDmemchr(buf, 0, sizeof(buf))) {
- strcpy(buf+sizeof(buf)-4, "...");
+ strcpy(buf+sizeof(buf)-4, "...");
}
fputs(buf, stdout);
@@ -1676,15 +1723,15 @@ link_open(hid_t location, const char *name)
/*-------------------------------------------------------------------------
- * Function: list
+ * Function: list
*
- * Purpose: Prints the group member name.
+ * Purpose: Prints the group member name.
*
- * Return: Success: 0
+ * Return: Success: 0
*
- * Failure: -1
+ * Failure: -1
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Monday, March 23, 1998
*
* Modifications:
@@ -1694,37 +1741,37 @@ link_open(hid_t location, const char *name)
static herr_t
list (hid_t group, const char *name, void *_iter)
{
- hid_t obj=-1;
- char buf[512], comment[50], *fullname=NULL, *s=NULL;
- H5G_stat_t sb;
- struct tm *tm;
- herr_t status;
- iter_t *iter = (iter_t*)_iter;
- int n;
+ hid_t obj=-1;
+ char buf[512], comment[50], *fullname=NULL, *s=NULL;
+ H5G_stat_t sb;
+ struct tm *tm;
+ herr_t status;
+ iter_t *iter = (iter_t*)_iter;
+ int n;
/* Print the object name, either full name or base name */
fullname = fix_name(iter->container, name);
if (fullname_g) {
- n = display_string(stdout, fullname, TRUE);
- printf("%*s ", MAX(0, 24-n), "");
+ n = display_string(stdout, fullname, TRUE);
+ printf("%*s ", MAX(0, 24-n), "");
} else {
- n = display_string(stdout, name, TRUE);
- printf("%*s ", MAX(0, 24-n), "");
+ n = display_string(stdout, name, TRUE);
+ printf("%*s ", MAX(0, 24-n), "");
}
/* Get object information */
H5E_BEGIN_TRY {
- status = H5Gget_objinfo(group, name, FALSE, &sb);
+ status = H5Gget_objinfo(group, name, FALSE, &sb);
} H5E_END_TRY;
if (status<0) {
- puts("**NOT FOUND**");
- return 0;
+ puts("**NOT FOUND**");
+ return 0;
} else if (sb.type<0 || sb.type>=H5G_NTYPES) {
- printf("Unknown type(%d)", sb.type);
- sb.type = -1;
+ printf("Unknown type(%d)", sb.type);
+ sb.type = -1;
}
if (sb.type>=0 && dispatch_g[sb.type].name) {
- fputs(dispatch_g[sb.type].name, stdout);
+ fputs(dispatch_g[sb.type].name, stdout);
}
/*
@@ -1732,12 +1779,12 @@ list (hid_t group, const char *name, void *_iter)
* and return.
*/
if ((s=sym_lookup(&sb))) {
- printf(", same as ");
- display_string(stdout, s, TRUE);
- printf("\n");
- goto done;
+ printf(", same as ");
+ display_string(stdout, s, TRUE);
+ printf("\n");
+ goto done;
} else {
- sym_insert(&sb, fullname);
+ sym_insert(&sb, fullname);
}
/*
@@ -1745,17 +1792,17 @@ list (hid_t group, const char *name, void *_iter)
* then return right away.
*/
if (sb.type>=0 &&
- (NULL==dispatch_g[sb.type].open ||
- (obj=(dispatch_g[sb.type].open)(group, name))<0)) {
- printf(" *ERROR*\n");
- goto done;
+ (NULL==dispatch_g[sb.type].open ||
+ (obj=(dispatch_g[sb.type].open)(group, name))<0)) {
+ printf(" *ERROR*\n");
+ goto done;
}
/*
* List the first line of information for the object.
*/
if (sb.type>=0 && dispatch_g[sb.type].list1) {
- (dispatch_g[sb.type].list1)(obj);
+ (dispatch_g[sb.type].list1)(obj);
}
putchar('\n');
@@ -1764,25 +1811,25 @@ list (hid_t group, const char *name, void *_iter)
* which is common to all objects.
*/
if (verbose_g>0 && H5G_LINK!=sb.type) {
- if (sb.type>=0) H5Aiterate(obj, NULL, list_attr, NULL);
- printf(" %-10s %lu:%lu:%lu:%lu\n", "Location:",
- sb.fileno[1], sb.fileno[0], sb.objno[1], sb.objno[0]);
- printf(" %-10s %u\n", "Links:", sb.nlink);
- if (sb.mtime>0 && NULL!=(tm=localtime(&(sb.mtime)))) {
- strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", tm);
- printf(" %-10s %s\n", "Modified:", buf);
- }
- comment[0] = '\0';
- H5Gget_comment(group, name, sizeof(comment), comment);
- strcpy(comment+sizeof(comment)-4, "...");
- if (comment[0]) {
- printf(" %-10s \"", "Comment:");
- display_string(stdout, comment, FALSE);
- puts("\"");
- }
+ if (sb.type>=0) H5Aiterate(obj, NULL, list_attr, NULL);
+ printf(" %-10s %lu:%lu:%lu:%lu\n", "Location:",
+ sb.fileno[1], sb.fileno[0], sb.objno[1], sb.objno[0]);
+ printf(" %-10s %u\n", "Links:", sb.nlink);
+ if (sb.mtime>0 && NULL!=(tm=localtime(&(sb.mtime)))) {
+ strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", tm);
+ printf(" %-10s %s\n", "Modified:", buf);
+ }
+ comment[0] = '\0';
+ H5Gget_comment(group, name, sizeof(comment), comment);
+ strcpy(comment+sizeof(comment)-4, "...");
+ if (comment[0]) {
+ printf(" %-10s \"", "Comment:");
+ display_string(stdout, comment, FALSE);
+ puts("\"");
+ }
}
if (sb.type>=0 && dispatch_g[sb.type].list2) {
- (dispatch_g[sb.type].list2)(obj, fullname);
+ (dispatch_g[sb.type].list2)(obj, fullname);
}
/*
@@ -1790,7 +1837,7 @@ list (hid_t group, const char *name, void *_iter)
*/
done:
if (sb.type>=0 && obj>=0 && dispatch_g[sb.type].close) {
- (dispatch_g[sb.type].close)(obj);
+ (dispatch_g[sb.type].close)(obj);
}
if (fullname) free(fullname);
return 0;
@@ -1798,17 +1845,17 @@ list (hid_t group, const char *name, void *_iter)
/*-------------------------------------------------------------------------
- * Function: fix_name
+ * Function: fix_name
*
- * Purpose: Returns a malloc'd buffer that contains the PATH and BASE
- * names separated by a single slash. It also removes duplicate
- * and trailing slashes.
+ * Purpose: Returns a malloc'd buffer that contains the PATH and BASE
+ * names separated by a single slash. It also removes duplicate
+ * and trailing slashes.
*
- * Return: Success: Ptr to fixed name from malloc()
+ * Return: Success: Ptr to fixed name from malloc()
*
- * Failure: NULL
+ * Failure: NULL
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Thursday, January 21, 1999
*
* Modifications:
@@ -1818,25 +1865,25 @@ list (hid_t group, const char *name, void *_iter)
static char *
fix_name(const char *path, const char *base)
{
- size_t n = (path?strlen(path):0) + (base?strlen(base):0) + 3;
- char *s = malloc(n), prev='\0';
- int len=0;
+ size_t n = (path?strlen(path):0) + (base?strlen(base):0) + 3;
+ char *s = malloc(n), prev='\0';
+ int len=0;
if (path) {
- /* Path, followed by slash */
- for (/*void*/; *path; path++) {
- if ('/'!=*path || '/'!=prev) prev = s[len++] = *path;
- }
- if ('/'!=prev) prev = s[len++] = '/';
+ /* Path, followed by slash */
+ for (/*void*/; *path; path++) {
+ if ('/'!=*path || '/'!=prev) prev = s[len++] = *path;
+ }
+ if ('/'!=prev) prev = s[len++] = '/';
}
if (base) {
- /* Base name w/o trailing slashes */
- const char *end = base + strlen(base);
- while (end>base && '/'==end[-1]) --end;
- for (/*void*/; base<end; base++) {
- if ('/'!=*base || '/'!=prev) prev = s[len++] = *base;
- }
+ /* Base name w/o trailing slashes */
+ const char *end = base + strlen(base);
+ while (end>base && '/'==end[-1]) --end;
+ for (/*void*/; base<end; base++) {
+ if ('/'!=*base || '/'!=prev) prev = s[len++] = *base;
+ }
}
s[len] = '\0';
@@ -1845,18 +1892,18 @@ fix_name(const char *path, const char *base)
/*-------------------------------------------------------------------------
- * Function: get_width
+ * Function: get_width
*
- * Purpose: Figure out how wide the screen is. This is highly
- * unportable, but the user can always override the width we
- * detect by giving a command-line option. These code snippets
- * were borrowed from the GNU less(1).
+ * Purpose: Figure out how wide the screen is. This is highly
+ * unportable, but the user can always override the width we
+ * detect by giving a command-line option. These code snippets
+ * were borrowed from the GNU less(1).
*
- * Return: Success: Number of columns.
+ * Return: Success: Number of columns.
*
- * Failure: Some default number of columms.
+ * Failure: Some default number of columms.
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Friday, November 6, 1998
*
* Modifications:
@@ -1866,63 +1913,63 @@ fix_name(const char *path, const char *base)
static int
get_width(void)
{
- int width = 80; /*the default */
- char *s;
+ int width = 80; /*the default */
+ char *s;
/*
* Try to get it from the COLUMNS environment variable first since it's
* value is sometimes wrong.
*/
if ((s=getenv("COLUMNS")) && *s && isdigit((int)*s)) {
- width = (int)strtol(s, NULL, 0);
+ width = (int)strtol(s, NULL, 0);
}
#if defined(H5_HAVE_STRUCT_VIDEOCONFIG) && defined(H5_HAVE__GETVIDEOCONFIG)
{
- /* Microsoft C */
- struct videoconfig w;
- _getvideoconfig(&w);
- width = w.numtextcols;
+ /* Microsoft C */
+ struct videoconfig w;
+ _getvideoconfig(&w);
+ width = w.numtextcols;
}
#elif defined(H5_HAVE_STRUCT_TEXT_INFO) && defined(H5_HAVE_GETTEXTINFO)
{
- /* Borland C or DJGPPC */
- struct text_info w;
- gettextinfo(&w);
- width = w.screenwidth;
+ /* Borland C or DJGPPC */
+ struct text_info w;
+ gettextinfo(&w);
+ width = w.screenwidth;
}
#elif defined(H5_HAVE_GETCONSOLESCREENBUFFERINFO)
{
- /* Win32 C */
- CONSOLE_SCREEN_BUFFER_INFO scr;
- GetConsoleScreenBufferInfo(con_out, &scr);
- width = scr.srWindow.Right - scr.srWindow.Left + 1;
+ /* Win32 C */
+ CONSOLE_SCREEN_BUFFER_INFO scr;
+ GetConsoleScreenBufferInfo(con_out, &scr);
+ width = scr.srWindow.Right - scr.srWindow.Left + 1;
}
#elif defined(H5_HAVE__SCRSIZE)
{
- /* OS/2 */
- int w[2];
- _scrsize(w);
- width = w[0];
+ /* OS/2 */
+ int w[2];
+ _scrsize(w);
+ width = w[0];
}
#elif defined(H5_HAVE_TIOCGWINSZ) && defined(H5_HAVE_IOCTL)
#ifndef __PUMAGON__
/* the ioctl() call coredump on TFLOPS. Turn it off for now. */
{
- /* Unix with ioctl(TIOCGWINSZ) */
- struct winsize w;
- if (ioctl(2, TIOCGWINSZ, &w)>=0 && w.ws_col>0) {
- width = w.ws_col;
- }
+ /* Unix with ioctl(TIOCGWINSZ) */
+ struct winsize w;
+ if (ioctl(2, TIOCGWINSZ, &w)>=0 && w.ws_col>0) {
+ width = w.ws_col;
+ }
}
#endif
#elif defined(H5_HAVE_TIOCGETD) && defined(H5_HAVE_IOCTL)
{
- /* Unix with ioctl(TIOCGETD) */
- struct uwdata w;
- if (ioctl(2, WIOCGETD, &w)>=0 && w.uw_width>0) {
- width = w.uw_width / w.uw_hs;
- }
+ /* Unix with ioctl(TIOCGETD) */
+ struct uwdata w;
+ if (ioctl(2, WIOCGETD, &w)>=0 && w.uw_width>0) {
+ width = w.uw_width / w.uw_hs;
+ }
}
#endif
@@ -1933,15 +1980,15 @@ get_width(void)
/*-------------------------------------------------------------------------
- * Function: main
+ * Function: main
*
- * Purpose: Opens a file and lists the specified group
+ * Purpose: Opens a file and lists the specified group
*
- * Return: Success: 0
+ * Return: Success: 0
*
- * Failure: 1
+ * Failure: 1
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Monday, March 23, 1998
*
* Modifications:
@@ -1951,15 +1998,15 @@ get_width(void)
int
main (int argc, char *argv[])
{
- hid_t file=-1, root=-1;
- char *fname=NULL, *oname=NULL, *x;
- const char *progname="h5ls";
- const char *s = NULL;
- char *rest, *container=NULL;
- int argno;
- H5G_stat_t sb;
- iter_t iter;
- static char root_name[] = "/";
+ hid_t file=-1, root=-1;
+ char *fname=NULL, *oname=NULL, *x;
+ const char *progname="h5ls";
+ const char *s = NULL;
+ char *rest, *container=NULL;
+ int argno;
+ H5G_stat_t sb;
+ iter_t iter;
+ static char root_name[] = "/";
char drivername[50];
/* Initialize h5tools lib */
@@ -1967,13 +2014,13 @@ main (int argc, char *argv[])
/* Build display table */
DISPATCH(H5G_DATASET, "Dataset", H5Dopen, H5Dclose,
- dataset_list1, dataset_list2);
+ dataset_list1, dataset_list2);
DISPATCH(H5G_GROUP, "Group", H5Gopen, H5Gclose,
- NULL, group_list2);
+ NULL, group_list2);
DISPATCH(H5G_TYPE, "Type", H5Topen, H5Tclose,
- NULL, datatype_list2);
+ NULL, datatype_list2);
DISPATCH(H5G_LINK, "-> ", link_open, NULL,
- NULL, NULL);
+ NULL, NULL);
#if 0
/* Name of this program without the path */
@@ -1986,125 +2033,125 @@ main (int argc, char *argv[])
/* Switches come before non-switch arguments */
for (argno=1; argno<argc && '-'==argv[argno][0]; argno++) {
- if (!strcmp(argv[argno], "--")) {
- /* Last switch */
- argno++;
- break;
- } else if (!strcmp(argv[argno], "--help")) {
- usage(progname);
- exit(0);
- } else if (!strcmp(argv[argno], "--address")) {
- address_g = TRUE;
- } else if (!strcmp(argv[argno], "--data")) {
- data_g = TRUE;
- } else if (!strcmp(argv[argno], "--errors")) {
- show_errors_g = TRUE;
- } else if (!strcmp(argv[argno], "--full")) {
- fullname_g = TRUE;
- } else if (!strcmp(argv[argno], "--group")) {
- grp_literal_g = TRUE;
- } else if (!strcmp(argv[argno], "--label")) {
- label_g = TRUE;
- } 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)) {
- width_g = (int)strtol(argv[argno]+8, &rest, 0);
- if (width_g<=0 || *rest) {
- usage(progname);
- exit(1);
- }
- } else if (!strcmp(argv[argno], "--width")) {
- if (argno+1>=argc) {
- usage(progname);
- exit(1);
- } else {
- s = argv[++argno];
- }
- width_g = (int)strtol(s, &rest, 0);
- if (width_g<=0 || *rest) {
- usage(progname);
- exit(1);
- }
- } else if (!strcmp(argv[argno], "--verbose")) {
- verbose_g++;
- } else if (!strcmp(argv[argno], "--version")) {
+ if (!strcmp(argv[argno], "--")) {
+ /* Last switch */
+ argno++;
+ break;
+ } else if (!strcmp(argv[argno], "--help")) {
+ usage(progname);
+ exit(0);
+ } else if (!strcmp(argv[argno], "--address")) {
+ address_g = TRUE;
+ } else if (!strcmp(argv[argno], "--data")) {
+ data_g = TRUE;
+ } else if (!strcmp(argv[argno], "--errors")) {
+ show_errors_g = TRUE;
+ } else if (!strcmp(argv[argno], "--full")) {
+ fullname_g = TRUE;
+ } else if (!strcmp(argv[argno], "--group")) {
+ grp_literal_g = TRUE;
+ } else if (!strcmp(argv[argno], "--label")) {
+ label_g = TRUE;
+ } 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)) {
+ width_g = (int)strtol(argv[argno]+8, &rest, 0);
+ if (width_g<=0 || *rest) {
+ usage(progname);
+ exit(1);
+ }
+ } else if (!strcmp(argv[argno], "--width")) {
+ if (argno+1>=argc) {
+ usage(progname);
+ exit(1);
+ } else {
+ s = argv[++argno];
+ }
+ width_g = (int)strtol(s, &rest, 0);
+ if (width_g<=0 || *rest) {
+ usage(progname);
+ exit(1);
+ }
+ } else if (!strcmp(argv[argno], "--verbose")) {
+ verbose_g++;
+ } else if (!strcmp(argv[argno], "--version")) {
print_version(progname);
- exit(0);
- } else if (!strcmp(argv[argno], "--hexdump")) {
- hexdump_g = TRUE;
- } else if (!strncmp(argv[argno], "-w", 2)) {
- if (argv[argno][2]) {
- s = argv[argno]+2;
- } else if (argno+1>=argc) {
- usage(progname);
- exit(1);
- } else {
- s = argv[++argno];
- }
- width_g = (int)strtol(s, &rest, 0);
- if (width_g<=0 || *rest) {
- usage(progname);
- exit(1);
- }
- } else if ('-'!=argv[argno][1]) {
- /* Single-letter switches */
- for (s=argv[argno]+1; *s; s++) {
- switch (*s) {
- case '?':
- case 'h': /* --help */
- usage(progname);
- exit(0);
- case 'a': /* --address */
- address_g = TRUE;
- break;
- case 'd': /* --data */
- data_g = TRUE;
- break;
- case 'e': /* --errors */
- show_errors_g = TRUE;
- break;
- case 'f': /* --full */
- fullname_g = TRUE;
- break;
- case 'g': /* --group */
- grp_literal_g = TRUE;
- break;
- case 'l': /* --label */
- label_g = TRUE;
- break;
- case 'r': /* --recursive */
- recursive_g = TRUE;
- fullname_g = TRUE;
- break;
- case 'S': /* --simple */
- simple_output_g = TRUE;
- break;
- case 's': /* --string */
- string_g = TRUE;
- break;
- case 'v': /* --verbose */
- verbose_g++;
- break;
- case 'V': /* --version */
+ exit(0);
+ } else if (!strcmp(argv[argno], "--hexdump")) {
+ hexdump_g = TRUE;
+ } else if (!strncmp(argv[argno], "-w", 2)) {
+ if (argv[argno][2]) {
+ s = argv[argno]+2;
+ } else if (argno+1>=argc) {
+ usage(progname);
+ exit(1);
+ } else {
+ s = argv[++argno];
+ }
+ width_g = (int)strtol(s, &rest, 0);
+ if (width_g<=0 || *rest) {
+ usage(progname);
+ exit(1);
+ }
+ } else if ('-'!=argv[argno][1]) {
+ /* Single-letter switches */
+ for (s=argv[argno]+1; *s; s++) {
+ switch (*s) {
+ case '?':
+ case 'h': /* --help */
+ usage(progname);
+ exit(0);
+ case 'a': /* --address */
+ address_g = TRUE;
+ break;
+ case 'd': /* --data */
+ data_g = TRUE;
+ break;
+ case 'e': /* --errors */
+ show_errors_g = TRUE;
+ break;
+ case 'f': /* --full */
+ fullname_g = TRUE;
+ break;
+ case 'g': /* --group */
+ grp_literal_g = TRUE;
+ break;
+ case 'l': /* --label */
+ label_g = TRUE;
+ break;
+ case 'r': /* --recursive */
+ recursive_g = TRUE;
+ fullname_g = TRUE;
+ break;
+ case 'S': /* --simple */
+ simple_output_g = TRUE;
+ break;
+ case 's': /* --string */
+ string_g = TRUE;
+ break;
+ case 'v': /* --verbose */
+ verbose_g++;
+ break;
+ case 'V': /* --version */
print_version(progname);
- exit(0);
- case 'x': /* --hexdump */
- hexdump_g = TRUE;
- break;
- default:
- usage(progname);
- exit(1);
- }
- }
- } else {
- usage(progname);
- exit(1);
- }
+ exit(0);
+ case 'x': /* --hexdump */
+ hexdump_g = TRUE;
+ break;
+ default:
+ usage(progname);
+ exit(1);
+ }
+ }
+ } else {
+ usage(progname);
+ exit(1);
+ }
}
/*
@@ -2112,8 +2159,8 @@ main (int argc, char *argv[])
* absolutely nothing ;-)
*/
if (argno>=argc) {
- usage(progname);
- exit(1);
+ usage(progname);
+ exit(1);
}
/* Turn off HDF5's automatic error printing unless you're debugging h5ls */
@@ -2124,7 +2171,7 @@ main (int argc, char *argv[])
* Each remaining argument is an hdf5 file followed by an optional slash
* and object name.
*
- * Example: ../dir1/foo/bar/baz
+ * Example: ../dir1/foo/bar/baz
* \_________/\______/
* file obj
*
@@ -2136,60 +2183,60 @@ main (int argc, char *argv[])
*/
show_file_name_g = (argc-argno > 1); /*show file names if more than one*/
while (argno<argc) {
- fname = argv[argno++];
- oname = NULL;
- file = -1;
+ fname = argv[argno++];
+ oname = NULL;
+ file = -1;
- while (fname && *fname) {
+ while (fname && *fname) {
file = h5tools_fopen(fname, NULL, drivername, sizeof drivername);
- if (file>=0) {
- if (verbose_g) {
- printf("Opened \"%s\" with %s driver.\n",
- fname, drivername);
- }
- break; /*success*/
- }
-
- /* Shorten the file name; lengthen the object name */
- x = oname;
- oname = strrchr(fname, '/');
- if (x) *x = '/';
- if (!oname) break;
- *oname = '\0';
- }
- if (file<0) {
- fprintf(stderr, "%s: unable to open file\n", argv[argno-1]);
+ if (file>=0) {
+ if (verbose_g) {
+ printf("Opened \"%s\" with %s driver.\n",
+ fname, drivername);
+ }
+ break; /*success*/
+ }
+
+ /* Shorten the file name; lengthen the object name */
+ x = oname;
+ oname = strrchr(fname, '/');
+ if (x) *x = '/';
+ if (!oname) break;
+ *oname = '\0';
+ }
+ if (file<0) {
+ fprintf(stderr, "%s: unable to open file\n", argv[argno-1]);
continue;
- }
- if (oname) oname++;
- if (!oname || !*oname) oname = root_name;
-
- /* Open the object and display it's information */
- if (H5Gget_objinfo(file, oname, TRUE, &sb)>=0 &&
- H5G_GROUP==sb.type && !grp_literal_g) {
- /*
- * Specified name is a group. List the complete contents of the
- * group.
- */
- sym_insert(&sb, oname);
+ }
+ if (oname) oname++;
+ if (!oname || !*oname) oname = root_name;
+
+ /* Open the object and display it's information */
+ if (H5Gget_objinfo(file, oname, TRUE, &sb)>=0 &&
+ H5G_GROUP==sb.type && !grp_literal_g) {
+ /*
+ * Specified name is a group. List the complete contents of the
+ * group.
+ */
+ sym_insert(&sb, oname);
iter.container = container = fix_name(show_file_name_g?fname:"", oname);
- H5Giterate(file, oname, NULL, list, &iter);
- free(container);
-
- } else if ((root=H5Gopen(file, "/"))<0) {
- exit(1); /*major problem!*/
-
- } else {
- /*
- * Specified name is a non-group object -- list that object. The
- * container for the object is everything up to the base name.
- */
+ H5Giterate(file, oname, NULL, list, &iter);
+ free(container);
+
+ } else if ((root=H5Gopen(file, "/"))<0) {
+ exit(1); /*major problem!*/
+
+ } else {
+ /*
+ * Specified name is a non-group object -- list that object. The
+ * container for the object is everything up to the base name.
+ */
iter.container = show_file_name_g ? fname : "/";
- list(root, oname, &iter);
- if (H5Gclose(root)<0) exit(1);
- }
- H5Fclose(file);
+ list(root, oname, &iter);
+ if (H5Gclose(root)<0) exit(1);
+ }
+ H5Fclose(file);
}
h5tools_close();
diff --git a/tools/h5ls/testh5ls.sh b/tools/h5ls/testh5ls.sh
index c4dcdcf..a813b49 100755
--- a/tools/h5ls/testh5ls.sh
+++ b/tools/h5ls/testh5ls.sh
@@ -145,6 +145,10 @@ TOOLTEST tarray1.ls -w80 -r -d tarray1.h5
# test for empty data
TOOLTEST tempty.ls -w80 -d tempty.h5
+# test for all dataset types written to attributes
+# enable -S for avoiding printing NATIVE types
+TOOLTEST tattr2.ls -w80 -v -S tattr2.h5
+
if test $nerrors -eq 0 ; then
echo "All h5ls tests passed."
fi
diff --git a/tools/testfiles/tattr2.h5 b/tools/testfiles/tattr2.h5
new file mode 100644
index 0000000..c154a0b
--- /dev/null
+++ b/tools/testfiles/tattr2.h5
Binary files differ
diff --git a/tools/testfiles/tattr2.ls b/tools/testfiles/tattr2.ls
new file mode 100644
index 0000000..bb934d8
--- /dev/null
+++ b/tools/testfiles/tattr2.ls
@@ -0,0 +1,48 @@
+#############################
+ output for 'h5ls -w80 -v -S tattr2.h5'
+#############################
+Opened "tattr2.h5" with sec2 driver.
+dset Dataset {2/2}
+ Attribute: string scalar
+ Type: 17-byte null-terminated ASCII string
+ Data: "string attribute"
+ Attribute: bitfield {2}
+ Type: 8-bit bitfield little-endian
+ Data: 0x01, 0x02
+ Attribute: opaque {2}
+ Type: 1-byte opaque type
+ (tag = "1-byte opaque type")
+ Data: 0x01, 0x02
+ Attribute: compound {2}
+ Type: struct {
+ "a" +0 32-bit little-endian integer
+ "b" +4 IEEE 32-bit little-endian float
+ } 8 bytes
+ Data: {1, 1}, {2, 2}
+ Attribute: reference {2}
+ Type: object reference
+ Data: DATASET-0:1:0:976, DATASET-0:1:0:976
+ Attribute: enum {2}
+ Type: enum 32-bit little-endian integer {
+ RED = 0
+ GREEN = 1
+ }
+ Data: RED, RED
+ Attribute: vlen {2}
+ Type: variable length of
+ 32-bit little-endian integer
+ Data: (0), (10,11)
+ Attribute: array {2}
+ Type: [3] 32-bit little-endian integer
+ Data: [1,1,1], [2,2,2]
+ Attribute: integer {2}
+ Type: 32-bit little-endian integer
+ Data: 0, 0
+ Attribute: float {2}
+ Type: IEEE 32-bit little-endian float
+ Data: 0, 0
+ Location: 0:1:0:976
+ Links: 1
+ Modified: 2003-05-19 21:08:18 CDT
+ Storage: 8 logical bytes, 0 allocated bytes
+ Type: 32-bit little-endian integer