Make putchar() handle newlines correctly
This commit is contained in:
+12
-2
@@ -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! =)");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user