mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-03 02:32:04 +08:00
40aa67003b
moved the ATTRIBUTE_DATA definition from h5dump.h to h5tools.h also created a ENUM_DATA in th5tools.h
271 lines
10 KiB
C
271 lines
10 KiB
C
/*
|
|
* Copyright © 1998 NCSA
|
|
* All rights reserved.
|
|
*
|
|
* 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>
|
|
#include <stdio.h>
|
|
|
|
/*
|
|
* Information about how to format output.
|
|
*/
|
|
typedef struct h5dump_t {
|
|
/*
|
|
* 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.
|
|
*
|
|
* 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'.
|
|
*
|
|
* 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.
|
|
*
|
|
* 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;
|
|
|
|
/*
|
|
* 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 `]'.
|
|
*/
|
|
const char *arr_pre;
|
|
const char *arr_sep;
|
|
const char *arr_suf;
|
|
|
|
/*
|
|
* 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 a right curly brace.
|
|
*/
|
|
const char *cmpd_name;
|
|
const char *cmpd_sep;
|
|
const char *cmpd_pre;
|
|
const char *cmpd_suf;
|
|
|
|
/*
|
|
* 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;
|
|
|
|
/*
|
|
* 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 */
|
|
|
|
/*
|
|
* Fields associated with entire lines.
|
|
*
|
|
* ncols: Number of columns per line defaults to 80.
|
|
*
|
|
* 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.
|
|
*
|
|
* 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.
|
|
*/
|
|
int line_ncols; /*columns of output */
|
|
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? */
|
|
} h5dump_t;
|
|
|
|
|
|
hid_t h5dump_fixtype(hid_t f_type);
|
|
int h5dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t p_type);
|
|
int h5dump_mem(FILE *stream, const h5dump_t *info, hid_t type, hid_t space,
|
|
void *mem);
|
|
int copy_atomic_char(char* output, char* input, int numchar, int freespace);
|
|
|
|
|
|
/*if we get a new program that needs to use the library add its name here*/
|
|
typedef enum {
|
|
UNKNOWN,
|
|
H5LS,
|
|
H5DUMP
|
|
} ProgType;
|
|
|
|
|
|
/*
|
|
taken from h5dump.h
|
|
*/
|
|
|
|
#define ATTRIBUTE_DATA 0
|
|
#define DATASET_DATA 1
|
|
#define ENUM_DATA 2
|
|
|
|
|
|
#define COL 3
|
|
extern int indent;
|
|
extern void indentation(int);
|
|
extern int nCols;
|
|
/*
|
|
used to determine what action to take in certain cases
|
|
this variable should be set at the beginning of all programs
|
|
that use the lib
|
|
*/
|
|
extern ProgType programtype;
|
|
#endif
|