summaryrefslogtreecommitdiff
path: root/kernel/src/libk
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksav013@gmail.com>2022-11-29 11:55:47 +0100
committerAleksa Vuckovic <aleksav013@gmail.com>2022-11-29 11:57:20 +0100
commitd36487d9fd2c19b54a3b97bdf3562a17184711fe (patch)
tree63c6d641925e7a78a9cb9ff89562c26b77b2bf3b /kernel/src/libk
parent450b9160fdcdb0b770b316caf1d72ab893bc7aa5 (diff)
kernel panic
Diffstat (limited to 'kernel/src/libk')
-rw-r--r--kernel/src/libk/serial_stdio.c17
-rw-r--r--kernel/src/libk/stdio.c45
2 files changed, 33 insertions, 29 deletions
diff --git a/kernel/src/libk/serial_stdio.c b/kernel/src/libk/serial_stdio.c
index fb61ba1..951a170 100644
--- a/kernel/src/libk/serial_stdio.c
+++ b/kernel/src/libk/serial_stdio.c
@@ -33,12 +33,19 @@ void serial_print_hex(uint64_t num)
void serial_printf(const char *s, ...)
{
- size_t count = 0;
- for(size_t i = 0; i < strlen(s); i++) if(s[i] == '%') count++;
-
va_list list;
va_start(list, s);
+ serial_vprintf(s, list);
+
+ va_end(list);
+}
+
+void serial_vprintf(const char *s, va_list list)
+{
+ size_t count = 0;
+ for(size_t i = 0; i < strlen(s); i++) if(s[i] == '%') count++;
+
for(size_t i = 0; i < strlen(s); i++)
{
if(s[i] == '%')
@@ -50,12 +57,10 @@ void serial_printf(const char *s, ...)
else if(s[i] == 'x') serial_print_hex((uint64_t)va_arg(list, uint64_t));
else
{
- serial_print_string("Wrong format using serial_printf\n");
+ serial_print_string("Wrong format using printf\n");
return;
}
}
else serial_print_char(s[i]);
}
-
- va_end(list);
}
diff --git a/kernel/src/libk/stdio.c b/kernel/src/libk/stdio.c
index e7e372d..8ecd97c 100644
--- a/kernel/src/libk/stdio.c
+++ b/kernel/src/libk/stdio.c
@@ -1,38 +1,32 @@
-#include <types.h>
#include <libk/stdio.h>
-#include <libk/serial_stdio.h>
-#include <stdarg.h>
#include <libk/string.h>
#include <graphics.h>
#include <serial.h>
-uint32_t curr_x;
-uint32_t curr_y;
-
void print_char(char c)
{
- if (curr_x * 8 >= main_fb.width) {
- curr_x = 0;
- curr_y++;
+ if (main_fb.x * 8 >= main_fb.width) {
+ main_fb.x = 0;
+ main_fb.y++;
}
- if (curr_y * 16 >= main_fb.height) {
- curr_x = 0;
- curr_y = 0;
+ if (main_fb.y * 16 >= main_fb.height) {
+ main_fb.x = 0;
+ main_fb.y = 0;
}
if (c == '\n') {
write_serial('\n');
- curr_x = 0;
- curr_y++;
+ main_fb.x = 0;
+ main_fb.y++;
return;
}
if (c == '\b') {
- if (curr_x != 0) {
- curr_x--;
+ if (main_fb.x != 0) {
+ main_fb.x--;
}
return;
}
- fb_draw_character(main_fb, c, (int32_t)curr_x * 8, (int32_t)curr_y * 16, WHITE, BLACK);
- curr_x++;
+ fb_draw_character(main_fb, c, (int32_t)main_fb.x * 8, (int32_t)main_fb.y * 16);
+ main_fb.x++;
write_serial(c);
}
@@ -60,12 +54,19 @@ void print_hex(uint64_t num)
void printf(const char *s, ...)
{
- size_t count = 0;
- for(size_t i = 0; i < strlen(s); i++) if(s[i] == '%') count++;
-
va_list list;
va_start(list, s);
+ vprintf(s, list);
+
+ va_end(list);
+}
+
+void vprintf(const char *s, va_list list)
+{
+ size_t count = 0;
+ for(size_t i = 0; i < strlen(s); i++) if(s[i] == '%') count++;
+
for(size_t i = 0; i < strlen(s); i++)
{
if(s[i] == '%')
@@ -83,6 +84,4 @@ void printf(const char *s, ...)
}
else print_char(s[i]);
}
-
- va_end(list);
}