2 * util.c: Assorted utilities for the disassembler
5 * Miguel de Icaza (miguel@ximian.com)
7 * (C) 2001 Ximian, Inc (http://www.ximian.com)
17 * @code: code to lookup in table
18 * @table: table to decode code
20 * Warning: returns static buffer.
23 map (guint32 code, dis_map_t *table)
27 for (i = 0; table [i].str != NULL; i++)
28 if (table [i].code == code)
30 return "invalid-flags";
36 * @table: table to decode bitfield
38 * Warning: returns static buffer.
41 flags (guint32 code, dis_map_t *table)
43 static char buffer [1024];
48 for (i = 0; code && table [i].str != NULL; i++)
49 if (table [i].code & code) {
50 code &= ~table [i].code;
51 strcat (buffer, table [i].str);
55 sprintf (buffer + strlen (buffer), "unknown-flag-%2x ", code);
62 * @buffer: pointer to buffer to dump
63 * @base: numbering base to use
64 * @count: number of bytes to dump
67 hex_dump (const char *buffer, int base, int count)
77 for (i = 0; i < count; i++){
80 printf ("\n0x%08X: ", (unsigned char) base + i);
82 printf ("%02X ", (unsigned char) (buffer [i]));
88 data_dump (const char *data, int len, const char* prefix) {
92 return g_strdup (" ()\n");
93 str = g_string_new (" (");
94 for (i = 0; i + 15 < len; i += 16) {
96 g_string_append_printf (str, "\n");
97 g_string_append_printf (str, "%s", prefix);
98 for (j = 0; j < 16; ++j)
99 g_string_append_printf (str, "%02X ", (unsigned char) (data [i + j]));
100 g_string_append_printf (str, i == len - 16? ") // ": " // ");
101 for (j = 0; j < 16; ++j)
102 g_string_append_printf (str, "%c", data [i + j] >= 32 && data [i + j] <= 126? data [i + j]: '.');
103 g_string_append_printf (str, "\n");
106 return g_string_free (str, FALSE);
108 g_string_append_printf (str, "%s", prefix);
111 g_string_append_printf (str, "%02X ", (unsigned char) (data [i]));
114 int count = 16 - (len % 16);
115 for (i = 0; i < count; ++i)
116 g_string_append_printf (str, " ");
118 g_string_append_printf (str, ") // ");
119 for (i = j; i < len; ++i)
120 g_string_append_printf (str, "%c", data [i] >= 32 && data [i] <= 126? data [i]: '.');
121 g_string_append_printf (str, "\n");
122 return g_string_free (str, FALSE);