From 53972e3f3ad64bfebf80c8d2264d66b3415a81bb Mon Sep 17 00:00:00 2001 From: Tom-on64 Date: Tue, 12 Mar 2024 16:35:31 +0100 Subject: [PATCH] Finally made read() in keyboard.h header --- src/kernel/keyboard.c | 30 ++++++++++++++++++++++++++++-- src/kernel/main.c | 10 +++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/kernel/keyboard.c b/src/kernel/keyboard.c index d8bd122..0a1e8b5 100644 --- a/src/kernel/keyboard.c +++ b/src/kernel/keyboard.c @@ -4,6 +4,7 @@ #include "system.h" #include "screen.h" #include "stdint.h" +#include "stdbool.h" const char US_Keyboard[2][128] = { { @@ -27,6 +28,12 @@ const char US_Keyboard[2][128] = { uint8_t shift = 0; +uint16_t bufferLen = 0; +char buffer[MAX_BUFFER_SIZE + 1] = { 0 }; +bool echo = false; +uint8_t echoAttr = 0x0f; +bool canBackspace = false; + void keyboardHandler() { uint8_t scancode; scancode = inb(0x60); @@ -38,12 +45,31 @@ void keyboardHandler() { if (scancode & 0x80) { // Keyup } else if (c != 0) { - putc(c, 0x07); + if (!canBackspace && c == '\b') return; + if (echo) putc(c, echoAttr); + + buffer[bufferLen] = c; + + if (c == '\b') bufferLen--; + else bufferLen++; + + if (bufferLen > 0) canBackspace = true; + else canBackspace = false; } } char* read(char terminator, uint8_t attr) { - // TODO: This + bufferLen = 0; + echo = true; + echoAttr = attr; + + while (buffer[bufferLen-1] != terminator && bufferLen < MAX_BUFFER_SIZE); + + echo = false; + canBackspace = false; + buffer[bufferLen] = '\0'; + + return buffer; } void setupKeyboard() { diff --git a/src/kernel/main.c b/src/kernel/main.c index ac8d27b..66858cf 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -22,8 +22,12 @@ void main() { clear(0x0f); print("kern.\n\n", 0x0f); - print("Drive: 0x", 0x0f); - print(itoa(driveNum, 16), 0x0f); - putc('\n', 0x00); + + while (1) { + print("> ", 0x0e); + char* input = read('\n', 0x0f); + if (*input == '\n') continue; + print(input, 0x0b); + } }