:: commit e8af825ba5bbdfa0668442689f027ee2f22580c2

Mintsuki <mintsuki@protonmail.com> — 2026-02-10 09:11

parents: 0b0794972c

lib/print: Update Flanterm subproject and handle carriage return

diff --git a/bootstrap b/bootstrap
index e17c6c27..704d83fc 100755
--- a/bootstrap
+++ b/bootstrap
@@ -104,7 +104,7 @@ if ! test -f version; then
     clone_repo_commit \
         https://codeberg.org/Mintsuki/Flanterm.git \
         flanterm \
-        cc71c677566453be4d1e821ede227a101868638c
+        281b72a74d0c09f4a5ba40f65b41e642acadca17
 
     download_by_hash \
         https://github.com/nothings/stb/raw/5c205738c191bcb0abc65c4febfa9bd25ff35234/stb_image.h \
diff --git a/common/lib/print.s2.c b/common/lib/print.s2.c
index 08595489..c04ca1d1 100644
--- a/common/lib/print.s2.c
+++ b/common/lib/print.s2.c
@@ -15,21 +15,8 @@
 static void s2_print(const char *s, size_t len) {
     for (size_t i = 0; i < len; i++) {
         struct rm_regs r = {0};
-        char c = s[i];
-
-        switch (c) {
-            case '\n':
-                r.eax = 0x0e00 | '\r';
-                rm_int(0x10, &r, &r);
-                r = (struct rm_regs){0};
-                r.eax = 0x0e00 | '\n';
-                rm_int(0x10, &r, &r);
-                break;
-            default:
-                r.eax = 0x0e00 | s[i];
-                rm_int(0x10, &r, &r);
-                break;
-        }
+        r.eax = 0x0e00 | s[i];
+        rm_int(0x10, &r, &r);
     }
 }
 #endif
@@ -145,8 +132,13 @@ void vprint(const char *fmt, va_list args) {
     size_t print_buf_i = 0;
 
     for (;;) {
-        while (*fmt && *fmt != '%')
+        while (*fmt && *fmt != '%') {
+            if (*fmt == '\n') {
+                prn_char(print_buf, &print_buf_i, '\r');
+            }
             prn_char(print_buf, &print_buf_i, *fmt++);
+        }
+
 
         if (!*fmt++)
             goto out;
@@ -238,17 +230,11 @@ out:
 #endif
 #if defined (BIOS)
         if (stage3_loaded && ((!quiet && serial) || COM_OUTPUT)) {
-            switch (print_buf[i]) {
-                case '\n':
-                    serial_out('\r');
-                    serial_out('\n');
-                    continue;
-                case '\e':
-                    serial_out('\e');
-                    continue;
-            }
             if (!isprint(print_buf[i])) {
-                continue;
+                switch (print_buf[i]) {
+                    case '\r': case '\n': case '\e': break;
+                    default: continue;
+                }
             }
             serial_out(print_buf[i]);
         }
diff --git a/test/e9print.c b/test/e9print.c
index 00d6fb49..88d3d6a2 100644
--- a/test/e9print.c
+++ b/test/e9print.c
@@ -15,6 +15,9 @@ void e9_putc(char c) {
 #endif
 #if defined (_LIMINE_PROTO)
     if (ft_ctx != NULL) {
+        if (c == '\n') {
+            flanterm_write(ft_ctx, "\r", 1);
+        }
         flanterm_write(ft_ctx, &c, 1);
     }
 #endif
tab: 248 wrap: offon