feature: multiple screens + cursor move (bug to fix)

style: reorganise code structure
This commit is contained in:
2024-09-08 05:03:50 +02:00
parent d270657fc9
commit cf617d6984
13 changed files with 206 additions and 173 deletions

43
src/kprint/kvprintf.c Normal file
View File

@ -0,0 +1,43 @@
#include "ctype.h"
#include "kprintf.h"
#include "stdlib.h"
#include "string.h"
#include "terminal.h"
#include <stdarg.h>
static int print_flag(char flag, va_list *ap)
{
switch (flag) {
case '%':
return terminal_putchar('%');
case 'i':
return terminal_writelong(va_arg(*ap, int));
case 'd':
return terminal_writelong(va_arg(*ap, int));
case 'c':
return terminal_putchar(va_arg(*ap, int));
case 's':
return terminal_writestring(va_arg(*ap, char *));
}
return 0;
}
int kvprintf(int level, const char *restrict format, va_list ap)
{
const char *start = format;
int ret = 0;
(void)level;
while (*start != '\0') {
if (*start == '%' && *(start + 1) != '\0') {
ret += print_flag(*(start + 1), &ap);
start++;
} else {
ret += terminal_putchar(*start);
}
start++;
}
update_cursor();
return ret;
}