From cbd974f40ecc75a8573d27e890ee34c060372416 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Fri, 12 Apr 2024 20:20:54 -0400 Subject: Initial commit Signed-off-by: Ian Moffett --- src/mex.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/mex.c (limited to 'src/mex.c') diff --git a/src/mex.c b/src/mex.c new file mode 100644 index 0000000..2c0af0c --- /dev/null +++ b/src/mex.c @@ -0,0 +1,86 @@ +#include +#include +#include +#include + +#define LINE_LEN 16 + +static void +dump_line(const char *line, size_t len) +{ + /* The amount of bytes we write */ + const uint8_t BYTE_COUNT = 2; + + for (size_t i = 0; i < LINE_LEN; ++i) { + /* Add padding if needed */ + if (i >= (len*BYTE_COUNT)+1) { + printf(" "); + continue; + } + + if (i >= len) { + /* Don't print any more bytes */ + continue; + } + + printf("%02X", line[i] & 0xFF); + if (((i + 1) % BYTE_COUNT) == 0) { + printf(" "); + } + } + + printf(" "); + for (size_t i = 0; i < len; ++i) { + if (line[i] > 31 && line[i] < 127) { + printf("%c", line[i]); + } else { + printf("."); + } + } + + printf("\n"); +} + +static void +dump_file(FILE *fp) +{ + char *buf = malloc(LINE_LEN * sizeof(char)); + ssize_t count; + size_t offset = 0; + + for (;;) { + count = fread(buf, sizeof(char), LINE_LEN, fp); + if (count <= 0) { + break; + } + + printf("%08X: ", offset); + offset += LINE_LEN*2; + dump_line(buf, count); + } + + free(buf); +} + +int +main(int argc, char **argv) +{ + FILE *fp; + + if (argc < 2 || argc > 2) { + printf("Usage: %s \n", argv[0]); + return 1; + } + + fp = fopen(argv[1], "rb"); + + if (fp == NULL) { + perror("fopen"); + return -1; + } + + dump_file(fp); + fclose(fp); + + return 0; +} -- cgit v1.2.3