diff --git a/include/QF/sizebuf.h b/include/QF/sizebuf.h index 08436b1b8..a6fc39411 100644 --- a/include/QF/sizebuf.h +++ b/include/QF/sizebuf.h @@ -50,6 +50,7 @@ void SZ_Clear (sizebuf_t *buf); void *SZ_GetSpace (sizebuf_t *buf, int length); void SZ_Write (sizebuf_t *buf, const void *data, int length); void SZ_Print (sizebuf_t *buf, const char *data); // strcats onto the sizebuf +void SZ_Dump (sizebuf_t *buf); ///@} diff --git a/libs/util/sizebuf.c b/libs/util/sizebuf.c index 757672367..785287d0c 100644 --- a/libs/util/sizebuf.c +++ b/libs/util/sizebuf.c @@ -99,3 +99,34 @@ SZ_Print (sizebuf_t *buf, const char *data) memcpy (SZ_GetSpace (buf, len), data, len); } + +VISIBLE void +SZ_Dump (sizebuf_t *buf) +{ + int i; + char chars[17], c; + + chars[16] = 0; + for (i = 0; i < buf->cursize; i++) { + if (i % 16 == 0) { + Sys_Printf ("%04x:", i); + } else if (i % 16 == 8) { + Sys_Printf (" "); + } + Sys_Printf (" %02x", buf->data[i]); + c = buf->data[i] & 0x7f; + if (c < ' ') { + c = '.'; + } + chars[i % 16] = c; + if (i % 16 == 15) { + Sys_Printf (" %s\n", chars); + } + } + i %= 16; + if (i) { + chars[i] = 0; + i = 16 - i; + Sys_Printf ("%*s %s\n", i * 3 + (i > 7), "", chars); + } +}