From edf9e71e2a7b6b89775c29cf28c19c6b89992c25 Mon Sep 17 00:00:00 2001 From: aqua Date: Mon, 28 Mar 2022 20:03:38 +0300 Subject: Initial commit x86 kernel that prints a hello world message to com1 --- lib/stdio/printf.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lib/stdio/printf.c (limited to 'lib/stdio/printf.c') diff --git a/lib/stdio/printf.c b/lib/stdio/printf.c new file mode 100644 index 0000000..f6b8ef6 --- /dev/null +++ b/lib/stdio/printf.c @@ -0,0 +1,38 @@ +#include +#include + +#include + +int +printf(const char *restrict format, ...) +{ + int written = 0; + va_list params; + va_start(params, format); + + int s = 0; + int l = 0; + for (int i = 0; format[i] != '\0'; ++i) { + if (format[i] == '%') { + written += uart_puts(COM1, &format[s], l); + s = i + 2; + ++i; + + switch (format[i]) { + case 's': + written += uart_puts(COM1, va_arg(params, const char *), -1); + break; + } + + l = 0; + } + + else + ++l; + } + + if (l > 0) written += uart_puts(COM1, &format[s], l); + + va_end(params); + return written; +} -- cgit v1.2.1