console: improvements

This commit is contained in:
Matheus
2022-10-15 17:36:42 -03:00
parent 6b112a528c
commit 90d762b079
2 changed files with 25 additions and 5 deletions
+5
View File
@@ -11,6 +11,11 @@ typedef unsigned int tcflag_t;
#define ECHO 0000010
#define ICANON 0000002
#define VMIN 6
#define INLCR 0000100
#define IGNCR 0000200
#define ICRNL 0000400
#define OCRNL 0000010
typedef struct{
tcflag_t c_iflag;
+20 -5
View File
@@ -65,11 +65,25 @@ __attribute__((noreturn)) static void console_thread(){
char* strbufptr;
size_t strbuflen;
char thingy[2];
if(packet.ascii){
if(packet.ascii == '\n'){
if(IGNCR & tty.c_iflag)
continue;
if((ICRNL & tty.c_iflag) == 0)
packet.ascii = '\r';
}
strbufptr = &packet.ascii;
strbuflen = 1;
if(packet.flags & (KBPACKET_FLAGS_LEFTCTRL | KBPACKET_FLAGS_RIGHTCTRL)){
if(!((packet.ascii > 'a' && packet.ascii < 'z') || (packet.ascii > 'A' && packet.ascii < 'Z')))
continue;
strbufptr[0] = packet.ascii > 'a' ? packet.ascii - 0x60 : packet.ascii - 0x40;
}
}
else{
switch(packet.keycode){
@@ -128,8 +142,9 @@ __attribute__((noreturn)) static void console_thread(){
break;
}
if(packet.ascii && tty.c_lflag & ECHO)
if(packet.ascii && tty.c_lflag & ECHO){
console_write(strbufptr, strbuflen);
}
for(size_t i = 0; i < strbuflen; ++i){
@@ -184,9 +199,9 @@ static int read(int *error, int dev, void* buff, size_t count, size_t offset){
arch_interrupt_disable();
readc += ringbuffer_read(&input, buff+readc, count-readc);
arch_interrupt_enable();
if(readc < count && readc < tty.c_cc[VMIN])
*error = event_wait(&inputevent, true);