greatbridf 3 роки тому
батько
коміт
9bc1fa9db7
3 змінених файлів з 23 додано та 3 видалено
  1. 8 0
      include/kernel/stdio.h
  2. 1 1
      src/kernel/event/event.cpp
  3. 14 2
      src/kernel/vga.c

+ 8 - 0
include/kernel/stdio.h

@@ -2,6 +2,14 @@
 
 #include <types/stdint.h>
 
+#ifndef CR
+#define CR ('\r')
+#endif
+
+#ifndef LF
+#define LF ('\n')
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif

+ 1 - 1
src/kernel/event/event.cpp

@@ -27,7 +27,7 @@ void dispatch_event(void)
     while (!input_event_queue.empty()) {
         for (auto iter = input_event_queue.begin(); iter != input_event_queue.end(); ++iter) {
             const auto& item = *iter;
-            snprintf(buf, 1024, "input event: type%x, data%x, code%x\n", item.type, item.data, item.code);
+            snprintf(buf, 1024, "\rinput event: type%x, data%x, code%x\r", item.type, item.data, item.code);
             vga_printk(buf, 0x0fu);
             input_event_queue.erase(iter);
         }

+ 14 - 2
src/kernel/vga.c

@@ -15,6 +15,12 @@ void vga_put_char(struct vga_char* c)
     }
 }
 
+void vga_return()
+{
+    const int32_t offset = p_vga_head - VGA_MEM;
+    p_vga_head -= (offset % VGA_SCREEN_WIDTH_IN_CHARS);
+}
+
 void vga_new_line()
 {
     int32_t offset = p_vga_head - VGA_MEM;
@@ -30,10 +36,16 @@ void vga_printk(const char* str, uint8_t color)
     struct vga_char s_c;
     s_c.color = color;
     while ((s_c.c = *(str++)) != 0x00) {
-        if (s_c.c == '\n') {
+        switch (s_c.c) {
+        case CR:
+            vga_return();
+            break;
+        case LF:
             vga_new_line();
-        } else {
+            break;
+        default:
             vga_put_char(&s_c);
+            break;
         }
     }
 }