Make putchar() handle newlines correctly

This commit is contained in:
2026-08-25 20:56:21 +03:00
parent e5c28e0cb5
commit 115c3b463c
+12 -2
View File
@@ -57,6 +57,7 @@ uint8_t terminal_color;
uint16_t *terminal_buffer = (uint16_t *)VGA_MEMORY; uint16_t *terminal_buffer = (uint16_t *)VGA_MEMORY;
void terminal_initialize(void) { void terminal_initialize(void) {
terminal_row = 0; terminal_row = 0;
terminal_column = 0; terminal_column = 0;
terminal_color = vga_entry_color(VGA_COLOR_LIGHT_GREY, VGA_COLOR_BLACK); terminal_color = vga_entry_color(VGA_COLOR_LIGHT_GREY, VGA_COLOR_BLACK);
@@ -79,6 +80,14 @@ void terminal_putentryat(char c, uint8_t color, size_t x, size_t y) {
} }
void terminal_putchar(char c) { void terminal_putchar(char c) {
if (c == '\n') {
terminal_row += 1;
terminal_column = 0;
if (terminal_row == VGA_HEIGHT)
terminal_row = 0;
return;
}
terminal_putentryat(c, terminal_color, terminal_column, terminal_row); terminal_putentryat(c, terminal_color, terminal_column, terminal_row);
if (++terminal_column == VGA_WIDTH) { if (++terminal_column == VGA_WIDTH) {
terminal_column = 0; terminal_column = 0;
@@ -88,8 +97,9 @@ void terminal_putchar(char c) {
} }
void terminal_write(const char *data, size_t size) { void terminal_write(const char *data, size_t size) {
for (size_t i = 0; i < size; i++) for (size_t i = 0; i < size; i++) {
terminal_putchar(data[i]); terminal_putchar(data[i]);
}
} }
void terminal_writestring(const char *data) { void terminal_writestring(const char *data) {
@@ -101,5 +111,5 @@ void kernel_main(void) {
terminal_initialize(); terminal_initialize();
/* Newline support is left as an exercise. */ /* Newline support is left as an exercise. */
terminal_writestring("Hello world from kernel.\n"); terminal_writestring("Hello world!\nI'm in the kernel and no one can stop me now! =)");
} }