2003-04-01 02:10:51 +08:00
|
|
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
2007-02-07 22:56:24 +08:00
|
|
|
* Copyright by The HDF Group. *
|
2003-04-01 02:10:51 +08:00
|
|
|
* Copyright by the Board of Trustees of the University of Illinois. *
|
|
|
|
* All rights reserved. *
|
|
|
|
* *
|
|
|
|
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
|
|
|
* terms governing use, modification, and redistribution, is contained in *
|
|
|
|
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
|
|
|
* of the source code distribution tree; Copyright.html can be found at the *
|
|
|
|
* root level of an installed copy of the electronic HDF5 document set and *
|
|
|
|
* is linked from the top-level documents page. It can also be found at *
|
2007-02-07 22:56:24 +08:00
|
|
|
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
|
|
|
* access to either file, you may request a copy from help@hdfgroup.org. *
|
2003-04-01 02:10:51 +08:00
|
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
|
2001-02-23 05:55:15 +08:00
|
|
|
/*
|
|
|
|
* Programmer: Robb Matzke <matzke@llnl.gov>
|
|
|
|
* Thursday, July 23, 1998
|
|
|
|
*
|
|
|
|
* Purpose: Support functions for the various tools.
|
|
|
|
*/
|
|
|
|
#ifndef H5TOOLS_H__
|
|
|
|
#define H5TOOLS_H__
|
|
|
|
|
|
|
|
#include "hdf5.h"
|
2009-09-15 03:52:42 +08:00
|
|
|
#include "h5tools_error.h"
|
2001-02-23 05:55:15 +08:00
|
|
|
|
2001-03-09 04:21:05 +08:00
|
|
|
#define ESCAPE_HTML 1
|
|
|
|
#define OPT(X,S) ((X) ? (X) : (S))
|
|
|
|
#define OPTIONAL_LINE_BREAK "\001" /* Special strings embedded in the output */
|
2007-03-13 00:36:34 +08:00
|
|
|
#define START_OF_DATA 0x0001
|
|
|
|
#define END_OF_DATA 0x0002
|
2001-02-23 05:55:15 +08:00
|
|
|
|
2006-12-20 02:14:26 +08:00
|
|
|
/* format for hsize_t */
|
2013-10-01 00:52:03 +08:00
|
|
|
#define HSIZE_T_FORMAT "%" H5_PRINTF_LL_WIDTH "u"
|
2006-12-20 02:14:26 +08:00
|
|
|
|
2009-09-04 22:50:13 +08:00
|
|
|
#define H5TOOLS_DUMP_MAX_RANK H5S_MAX_RANK
|
|
|
|
|
2013-01-23 04:43:12 +08:00
|
|
|
/* Stream macros */
|
|
|
|
#define FLUSHSTREAM(S) if(S != NULL) HDfflush(S)
|
|
|
|
#define PRINTSTREAM(S, F, ...) if(S != NULL) HDfprintf(S, F, __VA_ARGS__)
|
|
|
|
#define PRINTVALSTREAM(S, V) if(S != NULL) HDfprintf(S, V)
|
|
|
|
#define PUTSTREAM(X,S) if(S != NULL) HDfputs(X, S);
|
|
|
|
|
2010-01-30 12:29:13 +08:00
|
|
|
/*
|
|
|
|
* Strings for output - these were duplicated from the h5dump.h
|
|
|
|
* file in order to support region reference data display
|
2009-09-04 22:50:13 +08:00
|
|
|
*/
|
|
|
|
#define ATTRIBUTE "ATTRIBUTE"
|
|
|
|
#define BLOCK "BLOCK"
|
|
|
|
#define SUPER_BLOCK "SUPER_BLOCK"
|
|
|
|
#define COMPRESSION "COMPRESSION"
|
|
|
|
#define CONCATENATOR "//"
|
|
|
|
#define COMPLEX "COMPLEX"
|
|
|
|
#define COUNT "COUNT"
|
|
|
|
#define CSET "CSET"
|
|
|
|
#define CTYPE "CTYPE"
|
|
|
|
#define DATA "DATA"
|
|
|
|
#define DATASPACE "DATASPACE"
|
|
|
|
#define EXTERNAL "EXTERNAL"
|
|
|
|
#define FILENO "FILENO"
|
|
|
|
#define HARDLINK "HARDLINK"
|
|
|
|
#define NLINK "NLINK"
|
|
|
|
#define OBJID "OBJECTID"
|
|
|
|
#define OBJNO "OBJNO"
|
|
|
|
#define S_SCALAR "SCALAR"
|
|
|
|
#define S_SIMPLE "SIMPLE"
|
|
|
|
#define S_NULL "NULL"
|
|
|
|
#define SOFTLINK "SOFTLINK"
|
|
|
|
#define EXTLINK "EXTERNAL_LINK"
|
|
|
|
#define UDLINK "USERDEFINED_LINK"
|
|
|
|
#define START "START"
|
|
|
|
#define STRIDE "STRIDE"
|
|
|
|
#define STRSIZE "STRSIZE"
|
|
|
|
#define STRPAD "STRPAD"
|
|
|
|
#define SUBSET "SUBSET"
|
|
|
|
#define FILTERS "FILTERS"
|
|
|
|
#define DEFLATE "COMPRESSION DEFLATE"
|
|
|
|
#define DEFLATE_LEVEL "LEVEL"
|
|
|
|
#define SHUFFLE "PREPROCESSING SHUFFLE"
|
|
|
|
#define FLETCHER32 "CHECKSUM FLETCHER32"
|
|
|
|
#define SZIP "COMPRESSION SZIP"
|
|
|
|
#define NBIT "COMPRESSION NBIT"
|
|
|
|
#define SCALEOFFSET "COMPRESSION SCALEOFFSET"
|
|
|
|
#define SCALEOFFSET_MINBIT "MIN BITS"
|
|
|
|
#define STORAGE_LAYOUT "STORAGE_LAYOUT"
|
|
|
|
#define CONTIGUOUS "CONTIGUOUS"
|
|
|
|
#define COMPACT "COMPACT"
|
|
|
|
#define CHUNKED "CHUNKED"
|
|
|
|
#define EXTERNAL_FILE "EXTERNAL_FILE"
|
|
|
|
#define FILLVALUE "FILLVALUE"
|
|
|
|
#define FILE_CONTENTS "FILE_CONTENTS"
|
2012-02-18 05:41:58 +08:00
|
|
|
#define PACKED_BITS "PACKED_BITS"
|
|
|
|
#define PACKED_OFFSET "OFFSET"
|
|
|
|
#define PACKED_LENGTH "LENGTH"
|
2009-09-04 22:50:13 +08:00
|
|
|
|
|
|
|
#define BEGIN "{"
|
|
|
|
#define END "}"
|
|
|
|
|
2010-01-30 12:29:13 +08:00
|
|
|
/*
|
|
|
|
* dump structure for output - this was duplicated from the h5dump.h
|
|
|
|
* file in order to support region reference data display
|
2009-09-04 22:50:13 +08:00
|
|
|
*/
|
|
|
|
typedef struct h5tools_dump_header_t {
|
|
|
|
const char *name;
|
|
|
|
const char *filebegin;
|
|
|
|
const char *fileend;
|
|
|
|
const char *bootblockbegin;
|
|
|
|
const char *bootblockend;
|
|
|
|
const char *groupbegin;
|
|
|
|
const char *groupend;
|
|
|
|
const char *datasetbegin;
|
|
|
|
const char *datasetend;
|
|
|
|
const char *attributebegin;
|
|
|
|
const char *attributeend;
|
|
|
|
const char *datatypebegin;
|
|
|
|
const char *datatypeend;
|
|
|
|
const char *dataspacebegin;
|
|
|
|
const char *dataspaceend;
|
|
|
|
const char *databegin;
|
|
|
|
const char *dataend;
|
|
|
|
const char *softlinkbegin;
|
|
|
|
const char *softlinkend;
|
|
|
|
const char *extlinkbegin;
|
|
|
|
const char *extlinkend;
|
|
|
|
const char *udlinkbegin;
|
|
|
|
const char *udlinkend;
|
|
|
|
const char *subsettingbegin;
|
|
|
|
const char *subsettingend;
|
|
|
|
const char *startbegin;
|
|
|
|
const char *startend;
|
|
|
|
const char *stridebegin;
|
|
|
|
const char *strideend;
|
|
|
|
const char *countbegin;
|
|
|
|
const char *countend;
|
|
|
|
const char *blockbegin;
|
|
|
|
const char *blockend;
|
|
|
|
|
|
|
|
const char *fileblockbegin;
|
|
|
|
const char *fileblockend;
|
|
|
|
const char *bootblockblockbegin;
|
|
|
|
const char *bootblockblockend;
|
|
|
|
const char *groupblockbegin;
|
|
|
|
const char *groupblockend;
|
|
|
|
const char *datasetblockbegin;
|
|
|
|
const char *datasetblockend;
|
|
|
|
const char *attributeblockbegin;
|
|
|
|
const char *attributeblockend;
|
|
|
|
const char *datatypeblockbegin;
|
|
|
|
const char *datatypeblockend;
|
|
|
|
const char *dataspaceblockbegin;
|
|
|
|
const char *dataspaceblockend;
|
|
|
|
const char *datablockbegin;
|
|
|
|
const char *datablockend;
|
|
|
|
const char *softlinkblockbegin;
|
|
|
|
const char *softlinkblockend;
|
|
|
|
const char *extlinkblockbegin;
|
|
|
|
const char *extlinkblockend;
|
|
|
|
const char *udlinkblockbegin;
|
|
|
|
const char *udlinkblockend;
|
|
|
|
const char *strblockbegin;
|
|
|
|
const char *strblockend;
|
|
|
|
const char *enumblockbegin;
|
|
|
|
const char *enumblockend;
|
|
|
|
const char *structblockbegin;
|
|
|
|
const char *structblockend;
|
|
|
|
const char *vlenblockbegin;
|
|
|
|
const char *vlenblockend;
|
|
|
|
const char *subsettingblockbegin;
|
|
|
|
const char *subsettingblockend;
|
|
|
|
const char *startblockbegin;
|
|
|
|
const char *startblockend;
|
|
|
|
const char *strideblockbegin;
|
|
|
|
const char *strideblockend;
|
|
|
|
const char *countblockbegin;
|
|
|
|
const char *countblockend;
|
|
|
|
const char *blockblockbegin;
|
|
|
|
const char *blockblockend;
|
|
|
|
|
|
|
|
const char *dataspacedescriptionbegin;
|
|
|
|
const char *dataspacedescriptionend;
|
|
|
|
const char *dataspacedimbegin;
|
|
|
|
const char *dataspacedimend;
|
|
|
|
|
|
|
|
} h5tools_dump_header_t;
|
|
|
|
|
2001-02-23 05:55:15 +08:00
|
|
|
/*
|
|
|
|
* Information about how to format output.
|
|
|
|
*/
|
2006-01-24 04:46:34 +08:00
|
|
|
typedef struct h5tool_format_t {
|
2001-02-23 05:55:15 +08:00
|
|
|
/*
|
|
|
|
* Fields associated with formatting numeric data. If a datatype matches
|
|
|
|
* multiple formats based on its size, then the first applicable format
|
|
|
|
* from this list is used. However, if `raw' is non-zero then dump all
|
|
|
|
* data in hexadecimal format without translating from what appears on
|
|
|
|
* disk.
|
|
|
|
*
|
|
|
|
* raw: If set then print all data as hexadecimal without
|
|
|
|
* performing any conversion from disk.
|
|
|
|
*
|
|
|
|
* fmt_raw: The printf() format for each byte of raw data. The
|
|
|
|
* default is `%02x'.
|
|
|
|
*
|
|
|
|
* fmt_int: The printf() format to use when rendering data which is
|
|
|
|
* typed `int'. The default is `%d'.
|
|
|
|
*
|
|
|
|
* fmt_uint: The printf() format to use when rendering data which is
|
|
|
|
* typed `unsigned'. The default is `%u'.
|
|
|
|
*
|
|
|
|
* fmt_schar: The printf() format to use when rendering data which is
|
|
|
|
* typed `signed char'. The default is `%d'. This format is
|
|
|
|
* used ony if the `ascii' field is zero.
|
|
|
|
*
|
|
|
|
* fmt_uchar: The printf() format to use when rendering data which is
|
|
|
|
* typed `unsigned char'. The default is `%u'. This format
|
|
|
|
* is used only if the `ascii' field is zero.
|
2005-08-14 04:53:35 +08:00
|
|
|
*
|
2001-02-23 05:55:15 +08:00
|
|
|
* fmt_short: The printf() format to use when rendering data which is
|
|
|
|
* typed `short'. The default is `%d'.
|
|
|
|
*
|
|
|
|
* fmt_ushort: The printf() format to use when rendering data which is
|
|
|
|
* typed `unsigned short'. The default is `%u'.
|
|
|
|
*
|
|
|
|
* fmt_long: The printf() format to use when rendering data which is
|
|
|
|
* typed `long'. The default is `%ld'.
|
|
|
|
*
|
|
|
|
* fmt_ulong: The printf() format to use when rendering data which is
|
|
|
|
* typed `unsigned long'. The default is `%lu'.
|
|
|
|
*
|
|
|
|
* fmt_llong: The printf() format to use when rendering data which is
|
|
|
|
* typed `long long'. The default depends on what printf()
|
|
|
|
* format is available to print this datatype.
|
|
|
|
*
|
|
|
|
* fmt_ullong: The printf() format to use when rendering data which is
|
|
|
|
* typed `unsigned long long'. The default depends on what
|
|
|
|
* printf() format is available to print this datatype.
|
|
|
|
*
|
|
|
|
* fmt_double: The printf() format to use when rendering data which is
|
|
|
|
* typed `double'. The default is `%g'.
|
2005-08-14 04:53:35 +08:00
|
|
|
*
|
2001-02-23 05:55:15 +08:00
|
|
|
* fmt_float: The printf() format to use when rendering data which is
|
|
|
|
* typed `float'. The default is `%g'.
|
|
|
|
*
|
|
|
|
* ascii: If set then print 1-byte integer values as an ASCII
|
|
|
|
* character (no quotes). If the character is one of the
|
|
|
|
* standard C escapes then print the escaped version. If
|
|
|
|
* the character is unprintable then print a 3-digit octal
|
|
|
|
* escape. If `ascii' is zero then then 1-byte integers are
|
|
|
|
* printed as numeric values. The default is zero.
|
|
|
|
*
|
|
|
|
* str_locale: Determines how strings are printed. If zero then strings
|
|
|
|
* are printed like in C except. If set to ESCAPE_HTML then
|
|
|
|
* strings are printed using HTML encoding where each
|
|
|
|
* character not in the class [a-zA-Z0-9] is substituted
|
|
|
|
* with `%XX' where `X' is a hexadecimal digit.
|
|
|
|
*
|
|
|
|
* str_repeat: If set to non-zero then any character value repeated N
|
|
|
|
* or more times is printed as 'C'*N
|
|
|
|
*
|
|
|
|
* Numeric data is also subject to the formats for individual elements.
|
|
|
|
*/
|
|
|
|
hbool_t raw;
|
|
|
|
const char *fmt_raw;
|
|
|
|
const char *fmt_int;
|
|
|
|
const char *fmt_uint;
|
|
|
|
const char *fmt_schar;
|
|
|
|
const char *fmt_uchar;
|
|
|
|
const char *fmt_short;
|
|
|
|
const char *fmt_ushort;
|
|
|
|
const char *fmt_long;
|
|
|
|
const char *fmt_ulong;
|
|
|
|
const char *fmt_llong;
|
|
|
|
const char *fmt_ullong;
|
|
|
|
const char *fmt_double;
|
|
|
|
const char *fmt_float;
|
|
|
|
int ascii;
|
|
|
|
int str_locale;
|
|
|
|
int str_repeat;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Fields associated with compound array members.
|
|
|
|
*
|
|
|
|
* pre: A string to print at the beginning of each array. The
|
|
|
|
* default value is the left square bracket `['.
|
|
|
|
*
|
|
|
|
* sep: A string to print between array values. The default
|
|
|
|
* value is a ",\001" ("\001" indicates an optional line
|
|
|
|
* break).
|
|
|
|
*
|
|
|
|
* suf: A string to print at the end of each array. The default
|
|
|
|
* value is a right square bracket `]'.
|
|
|
|
*
|
|
|
|
* linebreaks: a boolean value to determine if we want to break the line
|
|
|
|
* after each row of an array.
|
|
|
|
*/
|
|
|
|
const char *arr_pre;
|
|
|
|
const char *arr_sep;
|
|
|
|
const char *arr_suf;
|
|
|
|
int arr_linebreak;
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2001-02-23 05:55:15 +08:00
|
|
|
/*
|
|
|
|
* Fields associated with compound data types.
|
|
|
|
*
|
|
|
|
* name: How the name of the struct member is printed in the
|
|
|
|
* values. By default the name is not printed, but a
|
|
|
|
* reasonable setting might be "%s=" which prints the name
|
|
|
|
* followed by an equal sign and then the value.
|
|
|
|
*
|
|
|
|
* sep: A string that separates one member from another. The
|
|
|
|
* default is ", \001" (the \001 indicates an optional
|
|
|
|
* line break to allow structs to span multiple lines of
|
|
|
|
* output).
|
|
|
|
*
|
|
|
|
* pre: A string to print at the beginning of a compound type.
|
|
|
|
* The default is a left curly brace.
|
|
|
|
*
|
|
|
|
* suf: A string to print at the end of each compound type. The
|
|
|
|
* default is right curly brace.
|
2005-08-14 04:53:35 +08:00
|
|
|
*
|
|
|
|
* end: a string to print after we reach the last element of
|
2001-02-23 05:55:15 +08:00
|
|
|
* each compound type. prints out before the suf.
|
|
|
|
*/
|
|
|
|
const char *cmpd_name;
|
|
|
|
const char *cmpd_sep;
|
|
|
|
const char *cmpd_pre;
|
|
|
|
const char *cmpd_suf;
|
|
|
|
const char *cmpd_end;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Fields associated with vlen data types.
|
|
|
|
*
|
|
|
|
* sep: A string that separates one member from another. The
|
|
|
|
* default is ", \001" (the \001 indicates an optional
|
|
|
|
* line break to allow structs to span multiple lines of
|
|
|
|
* output).
|
|
|
|
*
|
|
|
|
* pre: A string to print at the beginning of a vlen type.
|
|
|
|
* The default is a left parentheses.
|
|
|
|
*
|
|
|
|
* suf: A string to print at the end of each vlen type. The
|
|
|
|
* default is a right parentheses.
|
2005-08-14 04:53:35 +08:00
|
|
|
*
|
|
|
|
* end: a string to print after we reach the last element of
|
2001-02-23 05:55:15 +08:00
|
|
|
* each compound type. prints out before the suf.
|
|
|
|
*/
|
|
|
|
const char *vlen_sep;
|
|
|
|
const char *vlen_pre;
|
|
|
|
const char *vlen_suf;
|
|
|
|
const char *vlen_end;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Fields associated with the individual elements.
|
|
|
|
*
|
|
|
|
* fmt: A printf(3c) format to use to print the value string
|
|
|
|
* after it has been rendered. The default is "%s".
|
|
|
|
*
|
|
|
|
* suf1: This string is appended to elements which are followed by
|
|
|
|
* another element whether the following element is on the
|
|
|
|
* same line or the next line. The default is a comma.
|
|
|
|
*
|
|
|
|
* suf2: This string is appended (after `suf1') to elements which
|
|
|
|
* are followed on the same line by another element. The
|
|
|
|
* default is a single space.
|
|
|
|
*/
|
|
|
|
const char *elmt_fmt;
|
|
|
|
const char *elmt_suf1;
|
|
|
|
const char *elmt_suf2;
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2001-02-23 05:55:15 +08:00
|
|
|
/*
|
|
|
|
* Fields associated with the index values printed at the left edge of
|
|
|
|
* each line of output.
|
|
|
|
*
|
|
|
|
* n_fmt: Each index value is printed according to this printf(3c)
|
|
|
|
* format string which should include a format for a long
|
|
|
|
* integer. The default is "%lu".
|
|
|
|
*
|
|
|
|
* sep: Each integer in the index list will be separated from the
|
|
|
|
* others by this string, which defaults to a comma.
|
|
|
|
*
|
|
|
|
* fmt: After the index values are formated individually and
|
|
|
|
* separated from one another by some string, the entire
|
|
|
|
* resulting string will be formated according to this
|
|
|
|
* printf(3c) format which should include a format for a
|
|
|
|
* character string. The default is "%s".
|
|
|
|
*/
|
|
|
|
const char *idx_n_fmt; /*index number format */
|
|
|
|
const char *idx_sep; /*separator between numbers */
|
|
|
|
const char *idx_fmt; /*entire index format */
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2001-02-23 05:55:15 +08:00
|
|
|
/*
|
|
|
|
* Fields associated with entire lines.
|
|
|
|
*
|
|
|
|
* ncols: Number of columns per line defaults to 80.
|
|
|
|
*
|
|
|
|
* per_line: If this field has a positive value then every Nth element
|
|
|
|
* will be printed at the beginning of a line.
|
|
|
|
*
|
|
|
|
* pre: Each line of output contains an optional prefix area
|
|
|
|
* before the data. This area can contain the index for the
|
|
|
|
* first datum (represented by `%s') as well as other
|
|
|
|
* constant text. The default value is `%s'.
|
|
|
|
*
|
|
|
|
* 1st: This is the format to print at the beginning of the first
|
|
|
|
* line of output. The default value is the current value of
|
|
|
|
* `pre' described above.
|
|
|
|
*
|
|
|
|
* cont: This is the format to print at the beginning of each line
|
|
|
|
* which was continued because the line was split onto
|
|
|
|
* multiple lines. This often happens with compound
|
|
|
|
* data which is longer than one line of output. The default
|
|
|
|
* value is the current value of the `pre' field
|
|
|
|
* described above.
|
|
|
|
*
|
|
|
|
* suf: This character string will be appended to each line of
|
|
|
|
* output. It should not contain line feeds. The default
|
|
|
|
* is the empty string.
|
2005-08-14 04:53:35 +08:00
|
|
|
*
|
2001-02-23 05:55:15 +08:00
|
|
|
* sep: A character string to be printed after every line feed
|
|
|
|
* defaulting to the empty string. It should end with a
|
|
|
|
* line feed.
|
|
|
|
*
|
|
|
|
* multi_new: Indicates the algorithm to use when data elements tend to
|
|
|
|
* occupy more than one line of output. The possible values
|
|
|
|
* are (zero is the default):
|
|
|
|
*
|
|
|
|
* 0: No consideration. Each new element is printed
|
|
|
|
* beginning where the previous element ended.
|
|
|
|
*
|
|
|
|
* 1: Print the current element beginning where the
|
|
|
|
* previous element left off. But if that would result
|
|
|
|
* in the element occupying more than one line and it
|
|
|
|
* would only occupy one line if it started at the
|
|
|
|
* beginning of a line, then it is printed at the
|
|
|
|
* beginning of the next line.
|
|
|
|
*
|
|
|
|
* multi_new: If an element is continued onto additional lines then
|
|
|
|
* should the following element begin on the next line? The
|
|
|
|
* default is to start the next element on the same line
|
|
|
|
* unless it wouldn't fit.
|
2005-08-14 04:53:35 +08:00
|
|
|
*
|
2001-02-23 05:55:15 +08:00
|
|
|
* indentlevel: a string that shows how far to indent if extra spacing
|
|
|
|
* is needed. dumper uses it.
|
|
|
|
*/
|
2012-10-19 03:47:39 +08:00
|
|
|
unsigned line_ncols; /*columns of output */
|
2001-02-23 05:55:15 +08:00
|
|
|
size_t line_per_line; /*max elements per line */
|
|
|
|
const char *line_pre; /*prefix at front of each line */
|
|
|
|
const char *line_1st; /*alternate pre. on first line */
|
|
|
|
const char *line_cont; /*alternate pre. on continuation*/
|
|
|
|
const char *line_suf; /*string to append to each line */
|
|
|
|
const char *line_sep; /*separates lines */
|
|
|
|
int line_multi_new; /*split multi-line outputs? */
|
|
|
|
const char *line_indent; /*for extra identation if we need it*/
|
|
|
|
|
|
|
|
/*used to skip the first set of checks for line length*/
|
|
|
|
int skip_first;
|
|
|
|
|
|
|
|
/*flag used to hide or show the file number for obj refs*/
|
|
|
|
int obj_hidefileno;
|
|
|
|
|
|
|
|
/*string used to format the output for the obje refs*/
|
|
|
|
const char *obj_format;
|
|
|
|
|
|
|
|
/*flag used to hide or show the file number for dataset regions*/
|
|
|
|
int dset_hidefileno;
|
|
|
|
|
|
|
|
/*string used to format the output for the dataset regions*/
|
|
|
|
const char *dset_format;
|
|
|
|
|
|
|
|
const char *dset_blockformat_pre;
|
|
|
|
const char *dset_ptformat_pre;
|
|
|
|
const char *dset_ptformat;
|
|
|
|
|
2004-10-07 00:11:18 +08:00
|
|
|
/*print array indices in output matrix */
|
2004-06-08 00:40:25 +08:00
|
|
|
int pindex;
|
|
|
|
|
2004-10-07 00:11:18 +08:00
|
|
|
/*escape non printable characters */
|
2004-06-22 22:29:21 +08:00
|
|
|
int do_escape;
|
2004-06-11 01:35:48 +08:00
|
|
|
|
2006-01-24 04:46:34 +08:00
|
|
|
} h5tool_format_t;
|
2001-02-23 05:55:15 +08:00
|
|
|
|
2001-03-09 04:21:05 +08:00
|
|
|
typedef struct h5tools_context_t {
|
2005-05-09 22:53:22 +08:00
|
|
|
size_t cur_column; /*current column for output */
|
|
|
|
size_t cur_elmt; /*current element/output line */
|
|
|
|
int need_prefix; /*is line prefix needed? */
|
2007-08-31 04:03:37 +08:00
|
|
|
unsigned ndims; /*dimensionality */
|
2005-05-09 22:53:22 +08:00
|
|
|
hsize_t p_min_idx[H5S_MAX_RANK]; /*min selected index */
|
|
|
|
hsize_t p_max_idx[H5S_MAX_RANK]; /*max selected index */
|
|
|
|
int prev_multiline; /*was prev datum multiline? */
|
|
|
|
size_t prev_prefix_len; /*length of previous prefix */
|
|
|
|
int continuation; /*continuation of previous data?*/
|
|
|
|
hsize_t size_last_dim; /*the size of the last dimension,
|
|
|
|
*needed so we can break after each
|
|
|
|
*row */
|
|
|
|
int indent_level; /*the number of times we need some
|
|
|
|
*extra indentation */
|
|
|
|
int default_indent_level; /*this is used when the indent level gets changed */
|
|
|
|
hsize_t acc[H5S_MAX_RANK]; /* accumulator position */
|
|
|
|
hsize_t pos[H5S_MAX_RANK]; /* matrix position */
|
|
|
|
hsize_t sm_pos; /* current stripmine element position */
|
2001-03-09 04:21:05 +08:00
|
|
|
} h5tools_context_t;
|
|
|
|
|
2010-08-20 03:55:48 +08:00
|
|
|
typedef struct subset_d {
|
|
|
|
hsize_t *data;
|
|
|
|
unsigned int len;
|
|
|
|
} subset_d;
|
|
|
|
|
2001-03-09 04:21:05 +08:00
|
|
|
/* a structure to hold the subsetting particulars for a dataset */
|
|
|
|
struct subset_t {
|
2010-08-20 03:55:48 +08:00
|
|
|
subset_d start;
|
|
|
|
subset_d stride;
|
|
|
|
subset_d count;
|
|
|
|
subset_d block;
|
2001-02-23 05:55:15 +08:00
|
|
|
};
|
|
|
|
|
2010-01-30 12:29:13 +08:00
|
|
|
/* The following include, h5tools_str.h, must be after the
|
2009-09-04 22:50:13 +08:00
|
|
|
* above stucts are defined. There is a dependency in the following
|
|
|
|
* include that hasn't been identified yet. */
|
|
|
|
|
|
|
|
#include "h5tools_str.h"
|
|
|
|
|
2012-02-18 10:11:12 +08:00
|
|
|
H5TOOLS_DLLVAR h5tool_format_t h5tools_dataformat;
|
|
|
|
H5TOOLS_DLLVAR const h5tools_dump_header_t h5tools_standardformat;
|
|
|
|
H5TOOLS_DLLVAR const h5tools_dump_header_t* h5tools_dump_header_format;
|
2012-02-18 05:41:58 +08:00
|
|
|
|
2010-05-12 04:10:25 +08:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2012-02-18 05:41:58 +08:00
|
|
|
H5TOOLS_DLLVAR int packed_bits_num; /* number of packed bits to display */
|
|
|
|
H5TOOLS_DLLVAR int packed_data_offset; /* offset of packed bits to display */
|
|
|
|
H5TOOLS_DLLVAR int packed_data_length; /* lengtht of packed bits to display */
|
2011-04-30 02:38:41 +08:00
|
|
|
H5TOOLS_DLLVAR unsigned long long packed_data_mask; /* mask in which packed bits to display */
|
2013-01-23 04:43:12 +08:00
|
|
|
H5TOOLS_DLLVAR FILE *rawattrstream; /* output stream for raw attribute data */
|
2010-05-12 04:10:25 +08:00
|
|
|
H5TOOLS_DLLVAR FILE *rawdatastream; /* output stream for raw data */
|
2013-07-31 01:04:23 +08:00
|
|
|
H5TOOLS_DLLVAR FILE *rawinstream; /* input stream for raw input */
|
2012-02-25 05:14:47 +08:00
|
|
|
H5TOOLS_DLLVAR FILE *rawoutstream; /* output stream for raw output */
|
|
|
|
H5TOOLS_DLLVAR FILE *rawerrorstream; /* output stream for raw error */
|
2010-05-12 04:10:25 +08:00
|
|
|
H5TOOLS_DLLVAR int bin_output; /* binary output */
|
|
|
|
H5TOOLS_DLLVAR int bin_form; /* binary form */
|
|
|
|
H5TOOLS_DLLVAR int region_output; /* region output */
|
2012-02-18 05:41:58 +08:00
|
|
|
H5TOOLS_DLLVAR int oid_output; /* oid output */
|
|
|
|
H5TOOLS_DLLVAR int data_output; /* data output */
|
|
|
|
H5TOOLS_DLLVAR int attr_data_output; /* attribute data output */
|
2001-02-23 05:55:15 +08:00
|
|
|
|
2006-01-24 04:46:34 +08:00
|
|
|
/* Strings for output */
|
2007-06-19 04:03:30 +08:00
|
|
|
#define H5_TOOLS_GROUP "GROUP"
|
|
|
|
#define H5_TOOLS_DATASET "DATASET"
|
|
|
|
#define H5_TOOLS_DATATYPE "DATATYPE"
|
2001-02-23 05:55:15 +08:00
|
|
|
|
|
|
|
/* Definitions of useful routines */
|
2012-02-18 05:41:58 +08:00
|
|
|
H5TOOLS_DLL void h5tools_init(void);
|
|
|
|
H5TOOLS_DLL void h5tools_close(void);
|
2013-07-31 01:04:23 +08:00
|
|
|
H5TOOLS_DLL int h5tools_set_data_output_file(const char *fname, int is_bin);
|
|
|
|
H5TOOLS_DLL int h5tools_set_attr_output_file(const char *fname, int is_bin);
|
2013-08-01 00:22:40 +08:00
|
|
|
H5TOOLS_DLL int h5tools_set_input_file(const char *fname, int is_bin);
|
|
|
|
H5TOOLS_DLL int h5tools_set_output_file(const char *fname, int is_bin);
|
|
|
|
H5TOOLS_DLL int h5tools_set_error_file(const char *fname, int is_bin);
|
2012-02-18 05:41:58 +08:00
|
|
|
H5TOOLS_DLL hid_t h5tools_fopen(const char *fname, unsigned flags, hid_t fapl,
|
|
|
|
const char *driver, char *drivername, size_t drivername_len);
|
|
|
|
H5TOOLS_DLL hid_t h5tools_get_native_type(hid_t type);
|
|
|
|
H5TOOLS_DLL hid_t h5tools_get_little_endian_type(hid_t type);
|
|
|
|
H5TOOLS_DLL hid_t h5tools_get_big_endian_type(hid_t type);
|
|
|
|
H5TOOLS_DLL htri_t h5tools_detect_vlen(hid_t tid);
|
|
|
|
H5TOOLS_DLL htri_t h5tools_detect_vlen_str(hid_t tid);
|
|
|
|
H5TOOLS_DLL hbool_t h5tools_is_obj_same(hid_t loc_id1, const char *name1, hid_t loc_id2, const char *name2);
|
|
|
|
H5TOOLS_DLL void init_acc_pos(h5tools_context_t *ctx, hsize_t *dims);
|
|
|
|
H5TOOLS_DLL hbool_t h5tools_is_zero(const void *_mem, size_t size);
|
|
|
|
H5TOOLS_DLL int h5tools_canreadf(const char* name, hid_t dcpl_id);
|
|
|
|
H5TOOLS_DLL int h5tools_can_encode(H5Z_filter_t filtn);
|
|
|
|
|
|
|
|
H5TOOLS_DLL void h5tools_simple_prefix(FILE *stream, const h5tool_format_t *info,
|
|
|
|
h5tools_context_t *ctx, hsize_t elmtno, int secnum);
|
|
|
|
H5TOOLS_DLL void h5tools_region_simple_prefix(FILE *stream, const h5tool_format_t *info,
|
|
|
|
h5tools_context_t *ctx, hsize_t elmtno, hsize_t *ptdata, int secnum);
|
|
|
|
|
2012-07-26 06:17:48 +08:00
|
|
|
H5TOOLS_DLL int render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t nelmts);
|
2012-02-18 05:41:58 +08:00
|
|
|
H5TOOLS_DLL hbool_t render_bin_output_region_blocks(hid_t region_space, hid_t region_id,
|
|
|
|
FILE *stream, hid_t container);
|
|
|
|
H5TOOLS_DLL hbool_t render_bin_output_region_points(hid_t region_space, hid_t region_id,
|
|
|
|
FILE *stream, hid_t container);
|
|
|
|
|
|
|
|
H5TOOLS_DLL hbool_t h5tools_render_element(FILE *stream, const h5tool_format_t *info,
|
|
|
|
h5tools_context_t *ctx, h5tools_str_t *buffer, hsize_t *curr_pos,
|
|
|
|
size_t ncols, hsize_t local_elmt_counter, hsize_t elmt_counter);
|
|
|
|
H5TOOLS_DLL hbool_t h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
|
|
|
|
h5tools_context_t *ctx/*in,out*/,
|
|
|
|
h5tools_str_t *buffer/*string into which to render */,
|
|
|
|
hsize_t *curr_pos/*total data element position*/,
|
|
|
|
size_t ncols, hsize_t *ptdata,
|
|
|
|
hsize_t local_elmt_counter/*element counter*/,
|
|
|
|
hsize_t elmt_counter);
|
2010-05-12 04:10:25 +08:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2005-05-09 22:53:22 +08:00
|
|
|
#endif /* H5TOOLS_H__ */
|
2006-01-24 04:46:34 +08:00
|
|
|
|