diff options
author | Oxore <oxore@protonmail.com> | 2023-12-29 00:20:57 +0300 |
---|---|---|
committer | Oxore <oxore@protonmail.com> | 2023-12-29 00:20:57 +0300 |
commit | 5f8f5140eb6d7aa204d2565eec29fd7a2a934906 (patch) | |
tree | ae156bd1b7e982c8035c5cfa5546b587771232cb /debug.c | |
parent | 18893127524d87e47a948b9a92d8d8b2ab869852 (diff) |
Introduce runtime log level switching
Diffstat (limited to 'debug.c')
-rw-r--r-- | debug.c | 39 |
1 files changed, 39 insertions, 0 deletions
@@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: Unlicense */ + +#include "debug.h" + +#include <stdint.h> + +int g_log_level = LOG_LEVEL_INFO; + +static char ByteToPrintableChar(uint32_t byte) +{ + return (byte >= 0x20 && byte <= 0x7f) ? byte : '.'; +} + +void FPrintRaw(FILE *s, void const *data_arg, size_t size) +{ + const size_t cols = 16; + const size_t section_width = 8; + if (size == 0) { + return; + } + uint8_t const *data = data_arg; + for (size_t line = 0; line < (size - 1) / cols + 1; line++) { + fprintf(s, "%08zx: ", line * cols); + for (size_t c = 0; c < cols; c++) { + fprintf(s, "%02x ", data[line * cols + c]); + if (c % section_width == section_width - 1 && c != cols - 1) { + fprintf(s, " "); + } + } + fprintf(s, " |"); + for (size_t c = 0; c < cols; c++) { + fprintf(s, "%c", ByteToPrintableChar(data[line * cols + c])); + if (c % section_width == section_width - 1 && c != cols - 1) { + fprintf(s, " "); + } + } + fprintf(s, "|\n"); + } +} |