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;
+	}
+}