75b9fc4afaa9b69173c27c0646280abc3ee46de1
[lunaix-os.git] / lunaix-os / kernel / kprintf.c
1 #include <klibc/stdio.h>
2 #include <lunaix/lxconsole.h>
3 #include <lunaix/syslog.h>
4 #include <lunaix/tty/tty.h>
5
6 #define MAX_KPRINTF_BUF_SIZE 512
7 #define MAX_XFMT_SIZE 512
8
9 void
10 __kprintf(const char* component, const char* fmt, va_list args)
11 {
12     char buf[MAX_KPRINTF_BUF_SIZE];
13     if (!fmt)
14         return;
15     char log_level = '0';
16     char expanded_fmt[MAX_XFMT_SIZE];
17
18     if (*fmt == '\x1b') {
19         log_level = *(++fmt);
20         fmt++;
21     }
22
23     switch (log_level) {
24         case '0':
25             snprintf(expanded_fmt,
26                      MAX_XFMT_SIZE,
27                      "[%s] (%s) %s",
28                      "INFO",
29                      component,
30                      fmt);
31             break;
32         case '1':
33             // tty_set_theme(VGA_COLOR_BROWN, current_theme >> 12);
34             snprintf(expanded_fmt,
35                      MAX_XFMT_SIZE,
36                      "\x033[6;0m[%s] (%s) %s\x033[39;49m",
37                      "WARN",
38                      component,
39                      fmt);
40             break;
41         case '2':
42             // tty_set_theme(VGA_COLOR_LIGHT_RED, current_theme >> 12);
43             snprintf(expanded_fmt,
44                      MAX_XFMT_SIZE,
45                      "\x033[12;0m[%s] (%s) %s\x033[39;49m",
46                      "EROR",
47                      component,
48                      fmt);
49             break;
50         case '3':
51             // tty_set_theme(VGA_COLOR_LIGHT_BLUE, current_theme >> 12);
52             snprintf(expanded_fmt,
53                      MAX_XFMT_SIZE,
54                      "\x033[9;0m[%s] (%s) %s\x033[39;49m",
55                      "DEBG",
56                      component,
57                      fmt);
58             break;
59         default:
60             snprintf(expanded_fmt,
61                      MAX_XFMT_SIZE,
62                      "[%s] (%s) %s",
63                      "LOG",
64                      component,
65                      fmt);
66             break;
67     }
68
69     __sprintf_internal(buf, expanded_fmt, MAX_KPRINTF_BUF_SIZE, args);
70     console_write_str(buf);
71 }
72
73 void
74 kprint_panic(const char* fmt, ...)
75 {
76     char buf[MAX_KPRINTF_BUF_SIZE];
77     va_list args;
78     va_start(args, fmt);
79
80     tty_set_theme(VGA_COLOR_WHITE, VGA_COLOR_RED);
81     tty_clear_line(24);
82
83     __sprintf_internal(buf, fmt, MAX_KPRINTF_BUF_SIZE, args);
84     tty_put_str_at(buf, 0, 24);
85
86     va_end(args);
87 }