misc: readline.h -> getchar.h and drop unused readline() code
This commit is contained in:
parent
87c2cc121d
commit
4fe338c31f
|
@ -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);
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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
|
|
@ -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>
|
||||
|
|
|
@ -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++) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue