X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/db4d7d52fa00cc2fd3f25d971f57b73406d816ba..90129c6876c9bac2e468ab82c8264352d1952b4d:/lunaix-os/kernel/kprintf.c diff --git a/lunaix-os/kernel/kprintf.c b/lunaix-os/kernel/kprintf.c index 374fff2..d18691a 100644 --- a/lunaix-os/kernel/kprintf.c +++ b/lunaix-os/kernel/kprintf.c @@ -3,14 +3,13 @@ #include #include -#define MAX_KPRINTF_BUF_SIZE 1024 -#define MAX_XFMT_SIZE 1024 - -static char buf[MAX_KPRINTF_BUF_SIZE]; +#define MAX_KPRINTF_BUF_SIZE 512 +#define MAX_XFMT_SIZE 512 void __kprintf(const char* component, const char* fmt, va_list args) { + char buf[MAX_KPRINTF_BUF_SIZE]; if (!fmt) return; char log_level = '0'; @@ -34,7 +33,7 @@ __kprintf(const char* component, const char* fmt, va_list args) // tty_set_theme(VGA_COLOR_BROWN, current_theme >> 12); snprintf(expanded_fmt, MAX_XFMT_SIZE, - "\x033[6;0m[%s] (%s) %s\x033[39;49m", + "\033[6;0m[%s] (%s) %s\033[39;49m", "WARN", component, fmt); @@ -43,7 +42,7 @@ __kprintf(const char* component, const char* fmt, va_list args) // tty_set_theme(VGA_COLOR_LIGHT_RED, current_theme >> 12); snprintf(expanded_fmt, MAX_XFMT_SIZE, - "\x033[12;0m[%s] (%s) %s\x033[39;49m", + "\033[12;0m[%s] (%s) %s\033[39;49m", "EROR", component, fmt); @@ -52,7 +51,7 @@ __kprintf(const char* component, const char* fmt, va_list args) // tty_set_theme(VGA_COLOR_LIGHT_BLUE, current_theme >> 12); snprintf(expanded_fmt, MAX_XFMT_SIZE, - "\x033[9;0m[%s] (%s) %s\x033[39;49m", + "\033[9;0m[%s] (%s) %s\033[39;49m", "DEBG", component, fmt); @@ -74,16 +73,41 @@ __kprintf(const char* component, const char* fmt, va_list args) void kprint_panic(const char* fmt, ...) { + char buf[MAX_KPRINTF_BUF_SIZE]; va_list args; va_start(args, fmt); tty_set_theme(VGA_COLOR_WHITE, VGA_COLOR_RED); - tty_clear_line(10); - tty_clear_line(11); - tty_clear_line(12); + tty_clear_line(24); __sprintf_internal(buf, fmt, MAX_KPRINTF_BUF_SIZE, args); - tty_put_str_at(buf, 0, 11); + tty_put_str_at(buf, 0, 24); va_end(args); +} + +void +kprint_hex(const void* buffer, unsigned int size) +{ + unsigned char* data = (unsigned char*)buffer; + char buf[16]; + char ch_cache[16]; + unsigned int ptr = 0; + int i; + + ch_cache[0] = '|'; + ch_cache[1] = ' '; + while (size) { + snprintf(buf, 64, " %.4p: ", ptr); + console_write_str(buf); + for (i = 0; i < 8 && size; i++, size--, ptr++) { + unsigned char c = *(data + ptr) & 0xff; + ch_cache[2 + i] = (32 <= c && c < 127) ? c : '.'; + snprintf(buf, 64, "%.2x ", c); + console_write_str(buf); + } + ch_cache[2 + i] = '\0'; + console_write_str(ch_cache); + console_write_char('\n'); + } } \ No newline at end of file