...
This commit is contained in:
37
src/kernel.c
37
src/kernel.c
@@ -8,12 +8,10 @@
|
||||
void kmain()
|
||||
{
|
||||
vga_clear();
|
||||
|
||||
pic_remap();
|
||||
enable_interrupts();
|
||||
|
||||
kprintf("\nWelcome to nub OS\n");
|
||||
|
||||
kprintf("Welcome to nub OS\n");
|
||||
khalt();
|
||||
}
|
||||
|
||||
@@ -28,12 +26,18 @@ void kprintf(const char* fmt, ...)
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
|
||||
bool should_format = false;
|
||||
|
||||
for (size_t i = 0; fmt[i] != '\0'; i++)
|
||||
{
|
||||
if (fmt[i] == '%')
|
||||
if (should_format)
|
||||
{
|
||||
i++;
|
||||
if (fmt[i] == 's')
|
||||
should_format = false;
|
||||
if (fmt[i] == '%')
|
||||
{
|
||||
vga_put_char('%', 0x0F);
|
||||
}
|
||||
else if (fmt[i] == 's')
|
||||
{
|
||||
const char* str = va_arg(args, const char*);
|
||||
for (size_t j = 0; str[j] != '\0'; j++)
|
||||
@@ -43,20 +47,29 @@ void kprintf(const char* fmt, ...)
|
||||
}
|
||||
else if (fmt[i] == 'd')
|
||||
{
|
||||
int val = va_arg(args, int);
|
||||
char buf[12];
|
||||
itoa(val, buf);
|
||||
int64_t val = va_arg(args, int64_t);
|
||||
char buf[21];
|
||||
itoa64(val, buf);
|
||||
for (size_t j = 0; buf[j] != '\0'; j++)
|
||||
{
|
||||
vga_put_char(buf[j], 0x0F);
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (fmt[i] == 'u')
|
||||
{
|
||||
vga_put_char('%', 0x0F);
|
||||
vga_put_char(fmt[i], 0x0F);
|
||||
uint64_t val = va_arg(args, uint64_t);
|
||||
char buf[21];
|
||||
uitoa64(val, buf);
|
||||
for (size_t j = 0; buf[j] != '\0'; j++)
|
||||
{
|
||||
vga_put_char(buf[j], 0x0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (fmt[i] == '%')
|
||||
{
|
||||
should_format = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
vga_put_char(fmt[i], 0x0F);
|
||||
|
||||
Reference in New Issue
Block a user