diff options
Diffstat (limited to 'util/lxbios/hexdump.h')
-rw-r--r-- | util/lxbios/hexdump.h | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/util/lxbios/hexdump.h b/util/lxbios/hexdump.h new file mode 100644 index 0000000000..e9e69c0cae --- /dev/null +++ b/util/lxbios/hexdump.h @@ -0,0 +1,132 @@ +/*****************************************************************************\ + * hexdump.h + * $Id: hexdump.h,v 1.2 2005/12/16 22:45:49 dsp_llnl Exp $ +\*****************************************************************************/ + +#ifndef _HEXDUMP_H +#define _HEXDUMP_H + +/* hexdump.h + * + * Copyright (C) 2002 + * David S. Peterson. All rights reserved. + * + * Author: David S. Peterson <dave_peterson@pobox.com> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions, and the entire permission notice, including + * the following disclaimer of warranties. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions, and the entire permission notice, + * including the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * 3. The name(s) of the author(s) may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * ALTERNATIVELY, this product may be distributed under the terms of the GNU + * General Public License, in which case the provisions of the GPL are + * required INSTEAD OF the above restrictions. (This clause is necessary due + * to a potential bad interaction between the GPL and the restrictions + * contained in a BSD-style copyright.) + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <stdint.h> +#include <sys/types.h> +#include <stdio.h> + +typedef int (*is_printable_fn_t) (unsigned char c); + +/*-------------------------------------------------------------------------- + * hexdump_format_t + * + * This specifies how the output of the 'hexdump' function should look. + * + * fields: + * bytes_per_line: the number of data bytes to display per line of + * output + * addrprint_width: Each line of output begins with the address of the + * first data byte displayed on that line. This + * specifies the number of bytes wide the address + * should be displayed as. This value must be from 1 + * to 8. + * indent: This is a string to display at the start of each + * output line. Its purpose is to indent the output. + * sep1: This is a string to display between the address and + * the bytes of data displayed in hex. It serves as a + * separator. + * sep2: This is a string to display between individual hex + * values. It serves as a separator. + * sep3: This is a string to display between the bytes of + * data in hex and the bytes of data displayed as + * characters. It serves as a separator. + * nonprintable: This is a substitute character to display in place + * of nonprintable characters. + * is_printable_fn: This is a user-supplied function that takes a byte + * value as input and returns a boolean value + * indicating whether the corresponding character is + * printable. A value of NULL will cause + * default_is_printable_fn to be used. + *--------------------------------------------------------------------------*/ +typedef struct + { int bytes_per_line; + int addrprint_width; + const char *indent; + const char *sep1; + const char *sep2; + const char *sep3; + unsigned char nonprintable; + is_printable_fn_t is_printable_fn; + } +hexdump_format_t; + +/*-------------------------------------------------------------------------- + * hexdump + * + * Write a hex dump of 'mem' to 'outfile'. + * + * parameters: + * mem: a pointer to the memory to display + * bytes: the number of bytes of data to display + * addrprint_start: The address to associate with the first byte of + * data. For instance, a value of 0 indicates that the + * first byte displayed should be labeled as byte 0. + * outfile: The place where the hex dump should be written. + * For instance, stdout or stderr may be passed here. + * format: A structure specifying how the hex dump should be + * formatted. + *--------------------------------------------------------------------------*/ +void hexdump (const void *mem, int bytes, uint64_t addrprint_start, + FILE *outfile, const hexdump_format_t *format); + +/*-------------------------------------------------------------------------- + * default_is_printable_fn + * + * Determine whether the input character is printable. The proper behavior + * for this type of function may be system-dependent. This function appears + * to work well on a Linux system. However, if it is not adequate for your + * purposes, you can write your own. + * + * parameters: + * c: the input character + * + * return value: + * Return 1 if the input character is printable. Otherwise return 0. + *--------------------------------------------------------------------------*/ +int default_is_printable_fn (unsigned char c); + +#endif /* _HEXDUMP_H */ |