diff --git a/arch/amd64/hw/ps2.c b/arch/amd64/hw/ps2.c index 7492832..73e2c9a 100644 --- a/arch/amd64/hw/ps2.c +++ b/arch/amd64/hw/ps2.c @@ -48,7 +48,7 @@ static const char ps2_key_table_0[128] = { [0x00] = 0, [0x01] = '\033', - [0x02] = '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\b', + [0x02] = '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 0x7F, [0x0F] = '\t', [0x10] = 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', [0x1C] = '\n', @@ -64,7 +64,7 @@ static const char ps2_key_table_1[128] = { [0x00] = 0, [0x01] = '\033', - [0x02] = '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '\b', + [0x02] = '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', 0x7F, [0x0F] = '\t', [0x10] = 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', [0x1C] = '\n', diff --git a/sys/char/input.c b/sys/char/input.c index af201c7..5dcd845 100644 --- a/sys/char/input.c +++ b/sys/char/input.c @@ -55,7 +55,7 @@ void input_key(uint8_t key, uint8_t mods, const char *map0, const char *map1) { const char *map = (mods & INPUT_MOD_SHIFT) ? map1 : map0; uint8_t c = map[key]; - if (c && c < 0x7F) { + if (c && c <= 0x7F) { if (mods & INPUT_MOD_CAPS) { if (islower(c)) { c = toupper(c); diff --git a/sys/char/line.c b/sys/char/line.c index e38a15f..2bf73c6 100644 --- a/sys/char/line.c +++ b/sys/char/line.c @@ -46,18 +46,19 @@ ssize_t line_read(struct chrdev *chr, void *buf, size_t pos, size_t lim) { } } - if (c == '\b') { - if (rd) { + if (c == 0x7F) { + if (chr->tc.c_iflag & ICANON) { if (chr->tc.c_lflag & ECHOE) { tty_puts(chr, "\033[D \033[D"); } - if (chr->tc.c_iflag & ICANON) { + if (rd) { --wr; ++rem; --rd; - continue; } + + continue; } } diff --git a/sys/char/tty.c b/sys/char/tty.c index 0a0eee6..73bd78c 100644 --- a/sys/char/tty.c +++ b/sys/char/tty.c @@ -68,7 +68,7 @@ void tty_data_write(struct chrdev *tty, char c) { ring_signal(&tty->buffer, RING_SIGNAL_RET); } break; - case '\b': + case 0x7F: ring_signal(&tty->buffer, 0); break; case '\033':