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>
