aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2025-01-05 12:29:12 -0500
committerRaghuram Subramani <raghus2247@gmail.com>2025-01-05 12:29:12 -0500
commit0738bd96222da824ff89f7505fa40066d271ae53 (patch)
tree30b1264eecae347894b2c8bf9fcec994f7cc0760
parent2466c6f9d6eb287de8cfe6d1f15cf929265f856c (diff)
kernel: drivers; vga_text_buffer: Add a printf wrapper
-rw-r--r--kernel/drivers/vga_text_buffer/vga_text_buffer.c15
-rw-r--r--kernel/include/drivers/vga_text_buffer.h1
-rw-r--r--kernel/kernel/kernel.c3
3 files changed, 17 insertions, 2 deletions
diff --git a/kernel/drivers/vga_text_buffer/vga_text_buffer.c b/kernel/drivers/vga_text_buffer/vga_text_buffer.c
index 3122056..b2fa331 100644
--- a/kernel/drivers/vga_text_buffer/vga_text_buffer.c
+++ b/kernel/drivers/vga_text_buffer/vga_text_buffer.c
@@ -20,6 +20,7 @@
#include <stddef.h>
#include <stdint.h>
+#include <libk/stdio.h>
#include <libk/string.h>
#include <drivers/vga_text_buffer.h>
@@ -98,3 +99,17 @@ vga_text_buffer_write_string(const char *string)
for (size_t i = 0; i < size; i++)
vga_text_buffer_write_char(string[i]);
}
+
+void
+vga_text_buffer_printf(const char *string, ...)
+{
+ /* TODO: Dynamic Memory Allocation */
+ char str[256];
+
+ va_list ap;
+ va_start(ap, string);
+ vsnprintf(str, sizeof(str), string, ap);
+ va_end(ap);
+
+ vga_text_buffer_write_string(str);
+}
diff --git a/kernel/include/drivers/vga_text_buffer.h b/kernel/include/drivers/vga_text_buffer.h
index f060c7f..7bb88d6 100644
--- a/kernel/include/drivers/vga_text_buffer.h
+++ b/kernel/include/drivers/vga_text_buffer.h
@@ -55,5 +55,6 @@ bool vga_text_buffer_is_initialized(void);
void vga_text_buffer_initialize(void);
void vga_text_buffer_write_char(const char);
void vga_text_buffer_write_string(const char *);
+void vga_text_buffer_printf(const char *string, ...);
#endif
diff --git a/kernel/kernel/kernel.c b/kernel/kernel/kernel.c
index c999a1e..2e4470b 100644
--- a/kernel/kernel/kernel.c
+++ b/kernel/kernel/kernel.c
@@ -32,6 +32,7 @@ void
kernel_main(uint32_t magic, multiboot_info_t *multiboot_info)
{
serial_initialize();
+ vga_text_buffer_initialize();
if (magic != MULTIBOOT_BOOTLOADER_MAGIC) {
printk("Kernel", "Invalid Multiboot Magic: %x", magic);
@@ -41,8 +42,6 @@ kernel_main(uint32_t magic, multiboot_info_t *multiboot_info)
GDT_load();
memory_map_load(multiboot_info);
- vga_text_buffer_initialize();
-
printk("Kernel", "Started.");
free_memory_regions_t *free_memory_regions = memory_map_get_free_regions();