From dbbb74c22f42df9175eaea72c1eb12d6deab332c Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Fri, 12 Nov 2021 16:26:43 +0100 Subject: Keyboard functionality --- src/c/keyboard.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 70 insertions(+), 15 deletions(-) (limited to 'src/c/keyboard.c') diff --git a/src/c/keyboard.c b/src/c/keyboard.c index 5da3239..d082ec5 100644 --- a/src/c/keyboard.c +++ b/src/c/keyboard.c @@ -3,7 +3,11 @@ #include #define BUFFER_SIZE 200 -char buffer[BUFFER_SIZE]; +#define BUFFER_LOG 200 +char buffer[BUFFER_LOG][BUFFER_SIZE]; +size_t buffer_size[BUFFER_LOG]; +size_t buffer_current=0; +size_t buffer_all=0; size_t buffer_index=0; #define PIC1_COMMAND_PORT 0x20 @@ -15,28 +19,35 @@ size_t buffer_index=0; #define KEYBOARD_STATUS_PORT 0x64 void previous_field(void); -void terminal_putchar(char c); void tty(char *buffer); void prompt(void); void clear(); void us_en(char keymap[]); +void us_en_shift(char keymap[]); char charcode[256]; +char shift_charcode[256]; bool ispressed[128]; void init_keyboard() { us_en(charcode); + us_en_shift(shift_charcode); } -void backspace() +void deletelast() { - if(buffer_index<=0) return; - previous_field(); printf(" "); previous_field(); - buffer[--buffer_index]='\0'; +} + +void backspace() +{ + if(buffer_index<=0) return; + + deletelast(); + buffer[buffer_current][--buffer_index]='\0'; return; } @@ -45,8 +56,14 @@ void enter() printf("\n"); if(buffer_index>0) { - tty(buffer); - for(int i=0;i0) + { + buffer_size[buffer_current]=buffer_index; + for(size_t i=0;i='a'&&c<='z') c-=32; - } if(lctrl) { if(c=='l') { clear(); prompt(); - printf("%s",buffer); + printf("%s",buffer[buffer_current]); return; } } - buffer[buffer_index++]=c; + if(lshift||rshift) + { + c=shift_charcode[keycode]; + } + buffer[buffer_current][buffer_index++]=c; printf("%c",c); } } -- cgit v1.2.3