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

This commit is contained in:
mintsuki 2024-04-20 01:32:34 +02:00
parent 87c2cc121d
commit 4fe338c31f
8 changed files with 9 additions and 138 deletions

View File

@ -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);

View File

@ -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>

View File

@ -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);
}

View File

@ -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

View File

@ -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>

View File

@ -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++) {

View File

@ -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

View File

@ -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>