diff --git a/src/kernel/boot/debug.c b/src/kernel/boot/debug.c index 8369926..ad16ddc 100644 --- a/src/kernel/boot/debug.c +++ b/src/kernel/boot/debug.c @@ -3,6 +3,7 @@ #include #include #include +#include // TODO: Temporary declarations void vga_write(char c); @@ -69,6 +70,18 @@ void debug_vprintf(char *fmt, va_list args) } fmt++; + size_t padwidth = 0; + char padchar = ' '; + if(*fmt == '0') + { + padchar = '0'; + fmt++; + } + while(*fmt >= '0' && *fmt <= '9') + { + padwidth *= 10; + padwidth += (int)(*fmt++ - '0'); + } uint64_t base = 0; switch(*fmt) { @@ -100,6 +113,9 @@ void debug_vprintf(char *fmt, va_list args) uintmax_t number = va_arg(args, uintmax_t); char buf[128]; num2str(buf, number, base); + if(padwidth > strlen(buf)) + for(size_t i = 0; i < (padwidth - strlen(buf)); i++) + debug_putch(padchar); debug_puts(buf); } diff --git a/src/kernel/boot/debug.tt b/src/kernel/boot/debug.tt index 47bec7f..a10fc1d 100644 --- a/src/kernel/boot/debug.tt +++ b/src/kernel/boot/debug.tt @@ -115,3 +115,18 @@ TEST(printf_keeps_going_for_unknown_format_specifier) debug_printf("%y"); ASSERT_EQ_STR(vga_recv, "%y", BUFFER_SIZE); } +TEST(printf_pads_value) +{ + debug_printf("%5d", 123); + ASSERT_EQ_STR(vga_recv, " 123", BUFFER_SIZE); +} +TEST(printf_pads_more_than_9) +{ + debug_printf("%16d", 1); + ASSERT_EQ_STR(vga_recv, " 1", BUFFER_SIZE); +} +TEST(printf_zero_pads) +{ + debug_printf("%05d", 123); + ASSERT_EQ_STR(vga_recv, "00123", BUFFER_SIZE); +}