:: commit 4fe338c31fad0388866a58b94924d47e4ccd5157

mintsuki <mintsuki@protonmail.com> — 2024-04-19 23:32

parents: 87c2cc121d

misc: readline.h -> getchar.h and drop unused readline() code

diff --git a/common/entry.s3.c b/common/entry.s3.c
index 3f805edf..5f91c0d2 100644
--- a/common/entry.s3.c
+++ b/common/entry.s3.c
@@ -21,7 +21,7 @@
 #include <pxe/tftp.h>
 #include <drivers/disk.h>
 #include <sys/lapic.h>
-#include <lib/readline.h>
+#include <lib/getchar.h>
 #include <sys/cpu.h>
 
 void stage3_common(void);
diff --git a/common/lib/config.c b/common/lib/config.c
index 4e9d86a6..968191c7 100644
--- a/common/lib/config.c
+++ b/common/lib/config.c
@@ -3,7 +3,7 @@
 #include <lib/config.h>
 #include <lib/libc.h>
 #include <lib/misc.h>
-#include <lib/readline.h>
+#include <lib/getchar.h>
 #include <mm/pmm.h>
 #include <fs/file.h>
 #include <lib/print.h>
diff --git a/common/lib/readline.c b/common/lib/getchar.c
similarity index 68%
rename from common/lib/readline.c
rename to common/lib/getchar.c
index dd5f2599..f292ca6b 100644
--- a/common/lib/readline.c
+++ b/common/lib/getchar.c
@@ -1,6 +1,6 @@
 #include <stdint.h>
 #include <stddef.h>
-#include <lib/readline.h>
+#include <lib/getchar.h>
 #include <lib/libc.h>
 #include <lib/misc.h>
 #include <lib/term.h>
@@ -350,131 +350,3 @@ again:
     return ret;
 }
 #endif
-
-static void reprint_string(int x, int y, const char *s) {
-    size_t orig_x, orig_y;
-    FOR_TERM(TERM->cursor_enabled = false);
-    terms[0]->get_cursor_pos(terms[0], &orig_x, &orig_y);
-    set_cursor_pos_helper(x, y);
-    print("%s", s);
-    set_cursor_pos_helper(orig_x, orig_y);
-    FOR_TERM(TERM->cursor_enabled = true);
-}
-
-static void cursor_back(void) {
-    size_t x, y;
-    terms[0]->get_cursor_pos(terms[0], &x, &y);
-    if (x) {
-        x--;
-    } else if (y) {
-        y--;
-        x = terms[0]->cols - 1;
-    }
-    set_cursor_pos_helper(x, y);
-}
-
-static void cursor_fwd(void) {
-    size_t x, y;
-    terms[0]->get_cursor_pos(terms[0], &x, &y);
-    if (x < terms[0]->cols - 1) {
-        x++;
-    } else {
-        x = 0;
-        if (y < terms[0]->rows - 1) {
-            y++;
-        }
-    }
-    set_cursor_pos_helper(x, y);
-}
-
-void readline(const char *orig_str, char *buf, size_t limit) {
-    bool prev_autoflush = terms[0]->autoflush;
-    FOR_TERM(TERM->autoflush = false);
-
-    size_t orig_str_len = strlen(orig_str);
-    memmove(buf, orig_str, orig_str_len);
-    buf[orig_str_len] = 0;
-
-    size_t orig_x, orig_y;
-    terms[0]->get_cursor_pos(terms[0], &orig_x, &orig_y);
-
-    print("%s", orig_str);
-
-    for (size_t i = orig_str_len; ; ) {
-        FOR_TERM(TERM->double_buffer_flush(TERM));
-        int c = getchar();
-        switch (c) {
-            case GETCHAR_CURSOR_LEFT:
-                if (i) {
-                    i--;
-                    cursor_back();
-                }
-                continue;
-            case GETCHAR_CURSOR_RIGHT:
-                if (i < strlen(buf)) {
-                    i++;
-                    cursor_fwd();
-                }
-                continue;
-            case '\b':
-                if (i) {
-                    i--;
-                    cursor_back();
-            case GETCHAR_DELETE:;
-                    size_t j;
-                    if (buf[i] == 0) {
-                        continue;
-                    }
-                    for (j = i; ; j++) {
-                        buf[j] = buf[j+1];
-                        if (!buf[j]) {
-                            buf[j] = ' ';
-                            break;
-                        }
-                    }
-                    reprint_string(orig_x, orig_y, buf);
-                    buf[j] = 0;
-                }
-                continue;
-            case '\n':
-                print("\n");
-                goto out;
-            case GETCHAR_END:
-                for (size_t j = 0; j < strlen(buf) - i; j++) {
-                    cursor_fwd();
-                }
-                i = strlen(buf);
-                continue;
-            case GETCHAR_HOME:
-                for (size_t j = 0; j < i; j++) {
-                    cursor_back();
-                }
-                i = 0;
-                continue;
-            default: {
-                if (strlen(buf) < limit - 1 && isprint(c)) {
-                    for (size_t j = strlen(buf); ; j--) {
-                        buf[j+1] = buf[j];
-                        if (j == i)
-                            break;
-                    }
-                    buf[i] = c;
-                    i++;
-                    size_t prev_x, prev_y;
-                    terms[0]->get_cursor_pos(terms[0], &prev_x, &prev_y);
-                    cursor_fwd();
-                    reprint_string(orig_x, orig_y, buf);
-                    // If cursor has wrapped around, move the line start position up one row
-                    if (prev_x == terms[0]->cols - 1 && prev_y == terms[0]->rows - 1) {
-                        orig_y--;
-                        print("\n\e[J");  // Clear the bottom line
-                    }
-                }
-            }
-        }
-    }
-
-out:
-    FOR_TERM(TERM->double_buffer_flush(TERM));
-    FOR_TERM(TERM->autoflush = prev_autoflush);
-}
diff --git a/common/lib/readline.h b/common/lib/getchar.h
similarity index 85%
rename from common/lib/readline.h
rename to common/lib/getchar.h
index 80a3397a..4bbb46d7 100644
--- a/common/lib/readline.h
+++ b/common/lib/getchar.h
@@ -1,5 +1,5 @@
-#ifndef LIB__READLINE_H__
-#define LIB__READLINE_H__
+#ifndef LIB__GETCHAR_H__
+#define LIB__GETCHAR_H__
 
 #include <stddef.h>
 
@@ -24,6 +24,5 @@
 #endif
 
 int getchar(void);
-void readline(const char *orig_str, char *buf, size_t limit);
 
 #endif
diff --git a/common/lib/panic.s2.c b/common/lib/panic.s2.c
index 1c980020..c481d2db 100644
--- a/common/lib/panic.s2.c
+++ b/common/lib/panic.s2.c
@@ -8,7 +8,7 @@
 #   include <efi.h>
 #endif
 #include <lib/misc.h>
-#include <lib/readline.h>
+#include <lib/getchar.h>
 #include <lib/gterm.h>
 #include <lib/term.h>
 #include <mm/pmm.h>
diff --git a/common/lib/part.c b/common/lib/part.c
index 23f77b9b..647db2c5 100644
--- a/common/lib/part.c
+++ b/common/lib/part.c
@@ -1,7 +1,7 @@
 #include <stddef.h>
 #include <lib/part.h>
 #include <lib/print.h>
-#include <lib/readline.h>
+#include <lib/getchar.h>
 
 void list_volumes(void) {
     for (size_t i = 0; i < volume_index_i; i++) {
diff --git a/common/lib/uri.c b/common/lib/uri.c
index a171d5cd..9ed8e439 100644
--- a/common/lib/uri.c
+++ b/common/lib/uri.c
@@ -10,7 +10,7 @@
 #include <pxe/tftp.h>
 #include <compress/gzip.h>
 #include <menu.h>
-#include <lib/readline.h>
+#include <lib/getchar.h>
 #include <crypt/blake2b.h>
 
 // A URI takes the form of: resource://root/path#hash
diff --git a/common/menu.c b/common/menu.c
index c1a0a47f..4f183020 100644
--- a/common/menu.c
+++ b/common/menu.c
@@ -10,7 +10,7 @@
 #include <lib/config.h>
 #include <lib/term.h>
 #include <lib/gterm.h>
-#include <lib/readline.h>
+#include <lib/getchar.h>
 #include <lib/uri.h>
 #include <mm/pmm.h>
 #include <drivers/vbe.h>
tab: 248 wrap: offon