- Updates to entry selection behaviour to accommodate multiselection test
[AROS.git] / compiler / arossupport / hexdump.c
blob3e759916127897e833a5d32b79e608c53ab2601e
1 /*
2 Copyright © 1995-2016, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: Prints a hexdump of a memory region
6 Lang: english
7 */
9 #include <ctype.h>
10 #include <aros/debug.h>
12 /*****************************************************************************
14 NAME */
15 #include <proto/arossupport.h>
17 void hexdump (
19 /* SYNOPSIS */
20 const void * data,
21 IPTR offset,
22 ULONG count)
24 /* FUNCTION
25 Prints a hexdump of the data beginning at 'data'. The format
26 is like this:
28 xxxxxxxx: dddddddd dddddddd dddddddd dddddddd aaaaaaaaaaaaaaaa
30 Where x is the address (8 chars hex), dd is a data byte (2 chars
31 hex) and a is the ASCII representation of a data byte or "." if
32 the data byte is not printable.
34 INPUTS
35 data - Start here with the dump
36 offset - This offset is used as the address in the output. If
37 you give 0L here, then the first address will be
38 00000000. If you give (IPTR)data here, then the
39 first address will be the memory address of the data.
40 count - How many bytes to print.
42 RESULT
43 None.
45 NOTES
47 EXAMPLE
49 BUGS
51 SEE ALSO
53 INTERNALS
55 ******************************************************************************/
57 ULONG t, end;
58 int i;
60 end = (count + 15) & -16;
62 for (t=0; t<end; t++)
64 if ((t&15) == 0)
65 kprintf ("%p:", offset+t);
67 if ((t&3) == 0)
68 kprintf (" ");
70 if (t < count)
71 kprintf ("%02x", ((UBYTE *)data)[t]);
72 else
73 kprintf (" ");
75 if ((t&15) == 15)
77 kprintf (" ");
79 for (i=15; i>=0; i--)
81 UBYTE c = ((UBYTE *)data)[t-i];
84 * isprint() introduces dependency on stdc.library, which
85 * prevents using this function from within KS code.
87 if ((c > 0x1F) && (c < 0x7E))
88 kprintf ("%c", c);
89 else
90 kprintf (".");
93 kprintf ("\n");
96 } /* hexdump */