Add padding to field width (right adjust)

This commit is contained in:
Thomas Lovén 2017-12-06 19:43:59 +01:00
parent 0f5445da62
commit 042f61bdb3
2 changed files with 31 additions and 0 deletions

View File

@ -3,6 +3,7 @@
#include <stdint.h> #include <stdint.h>
#include <serial.h> #include <serial.h>
#include <vga.h> #include <vga.h>
#include <memory.h>
// TODO: Temporary declarations // TODO: Temporary declarations
void vga_write(char c); void vga_write(char c);
@ -69,6 +70,18 @@ void debug_vprintf(char *fmt, va_list args)
} }
fmt++; 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; uint64_t base = 0;
switch(*fmt) switch(*fmt)
{ {
@ -100,6 +113,9 @@ void debug_vprintf(char *fmt, va_list args)
uintmax_t number = va_arg(args, uintmax_t); uintmax_t number = va_arg(args, uintmax_t);
char buf[128]; char buf[128];
num2str(buf, number, base); num2str(buf, number, base);
if(padwidth > strlen(buf))
for(size_t i = 0; i < (padwidth - strlen(buf)); i++)
debug_putch(padchar);
debug_puts(buf); debug_puts(buf);
} }

View File

@ -115,3 +115,18 @@ TEST(printf_keeps_going_for_unknown_format_specifier)
debug_printf("%y"); debug_printf("%y");
ASSERT_EQ_STR(vga_recv, "%y", BUFFER_SIZE); 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);
}