...
This commit is contained in:
@@ -104,19 +104,7 @@ void console_clear() {
|
||||
// - `x`: u32 (hex)
|
||||
// - `c`: char (ascii)
|
||||
// - `s`: char* (ascii string)
|
||||
//
|
||||
// ```c
|
||||
// printf(
|
||||
// "The answer is %d is located at offset %x in file %s",
|
||||
// 42,
|
||||
// 0x2000
|
||||
// "hitchhiker.txt"
|
||||
// );
|
||||
// ```
|
||||
void kprintf(const char *fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
|
||||
void kvprintf(const char *fmt, va_list args) {
|
||||
bool should_format = false;
|
||||
|
||||
for (size_t i = 0; fmt[i] != '\0'; i++) {
|
||||
@@ -135,25 +123,46 @@ void kprintf(const char *fmt, ...) {
|
||||
console_putchar(character, VGA_DEFAULT_COLOR);
|
||||
} else if (fmt[i] == 'd') {
|
||||
u32 val = va_arg(args, u32);
|
||||
char buf[21];
|
||||
itoa(val, buf);
|
||||
char buf[ITOA32_BUFSIZE];
|
||||
itoa32(val, buf);
|
||||
for (size_t j = 0; buf[j] != '\0'; j++) {
|
||||
console_putchar(buf[j], VGA_DEFAULT_COLOR);
|
||||
}
|
||||
} else if (fmt[i] == 'u') {
|
||||
u32 val = va_arg(args, u32);
|
||||
char buf[21];
|
||||
uitoa(val, buf);
|
||||
char buf[UITOA32_BUFSIZE];
|
||||
uitoa32(val, buf);
|
||||
for (size_t j = 0; buf[j] != '\0'; j++) {
|
||||
console_putchar(buf[j], VGA_DEFAULT_COLOR);
|
||||
}
|
||||
} else if (fmt[i] == 'x') {
|
||||
u32 val = va_arg(args, u32);
|
||||
char buf[17];
|
||||
uitoa_hex(val, buf);
|
||||
char buf[UITOA32_HEX_BUFSIZE];
|
||||
uitoa32_hex(val, buf);
|
||||
for (size_t j = 0; buf[j] != '\0'; j++) {
|
||||
console_putchar(buf[j], VGA_DEFAULT_COLOR);
|
||||
}
|
||||
} else if (fmt[i] == 'D') {
|
||||
i64 val = va_arg(args, i64);
|
||||
char buf[ITOA64_BUFSIZE];
|
||||
itoa64(val, buf);
|
||||
for (size_t j = 0; buf[j] != '\0'; j++) {
|
||||
console_putchar(buf[j], VGA_DEFAULT_COLOR);
|
||||
}
|
||||
} else if (fmt[i] == 'U') {
|
||||
u64 val = va_arg(args, u64);
|
||||
char buf[UITOA64_BUFSIZE];
|
||||
uitoa64(val, buf);
|
||||
for (size_t j = 0; buf[j] != '\0'; j++)
|
||||
console_putchar(buf[j], VGA_DEFAULT_COLOR);
|
||||
|
||||
} else if (fmt[i] == 'X') {
|
||||
u64 val = va_arg(args, u64);
|
||||
char buf[UITOA64_HEX_BUFSIZE];
|
||||
uitoa64_hex(val, buf);
|
||||
for (size_t j = 0; buf[j] != '\0'; j++)
|
||||
console_putchar(buf[j], VGA_DEFAULT_COLOR);
|
||||
|
||||
} else {
|
||||
console_putchar(fmt[i], VGA_DEFAULT_COLOR);
|
||||
}
|
||||
@@ -163,6 +172,26 @@ void kprintf(const char *fmt, ...) {
|
||||
console_putchar(fmt[i], VGA_DEFAULT_COLOR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Supported formats:
|
||||
// - `d`: i32 (decimal)
|
||||
// - `u`: u32 (decimal)
|
||||
// - `x`: u32 (hex)
|
||||
// - `c`: char (ascii)
|
||||
// - `s`: char* (ascii string)
|
||||
//
|
||||
// ```c
|
||||
// printf(
|
||||
// "The answer is %d is located at offset %x in file %s",
|
||||
// 42,
|
||||
// 0x2000
|
||||
// "hitchhiker.txt"
|
||||
// );
|
||||
// ```
|
||||
void kprintf(const char *fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
kvprintf(fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
Reference in New Issue
Block a user