FreeCalypso > hg > freecalypso-tools
diff rvinterf/libprint/hexdump.c @ 928:65953c172f24
rvinterf/lowlevel: new hex dump format
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 23 May 2023 05:23:19 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/libprint/hexdump.c Tue May 23 05:23:19 2023 +0000 @@ -0,0 +1,52 @@ +/* + * The function contained in this module implements hex dump functionality: + * an arbitrary binary packet is dumped in hex, line by line, calling an output + * function for each line. + */ + +#include <sys/types.h> +#include <stdio.h> +#include <string.h> +#include <strings.h> + +void +packet_hex_dump(src, srclen, outfunc) + u_char *src; + unsigned srclen; + void (*outfunc)(); +{ + u_char *sp = src; + unsigned remain = srclen; + unsigned offset = 0; + unsigned chunk; + char line[80], *dp; + int i, c; + + while (remain) { + sprintf(line, "%04X: ", offset); + dp = line + 7; + chunk = remain; + if (chunk > 16) + chunk = 16; + for (i = 0; i < 16; i++) { + if (i < chunk) + sprintf(dp, "%02X ", sp[i]); + else + strcpy(dp, " "); + dp += 3; + if (i == 7 || i == 15) + *dp++ = ' '; + } + for (i = 0; i < chunk; i++) { + c = sp[i]; + if (c < ' ' || c > '~') + c = '.'; + *dp++ = c; + } + *dp = '\0'; + outfunc(line); + sp += chunk; + remain -= chunk; + offset += chunk; + } +}