From bdaba41cbe7f10c750c31b66dd2696e6b6ea7436 Mon Sep 17 00:00:00 2001 From: dam Date: Mon, 16 Oct 2023 01:23:40 +0100 Subject: Improved input reading to wait for event instead of pooling. --- TUI/module.jai | 19 +++---------------- TUI/unix.jai | 4 ++-- ttt.jai | 2 +- 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/TUI/module.jai b/TUI/module.jai index 7a7dc54..c1f40ce 100644 --- a/TUI/module.jai +++ b/TUI/module.jai @@ -98,19 +98,10 @@ Keys :: enum u8 { Resize :: 1; //410; // TODO Why?! } -input_semaphore: Semaphore; key_semaphore: Semaphore; key_mutex: Mutex; key_input := Keys.None; key_resize := Keys.None; -// key_queue: [2] Key; // TODO Queue with size 1!? hmmm nice! -// key_queue_idx := 0; - - - -// queue_semaphore: Semaphore; -// queue_mutex: Mutex; -// queue :: Keys; // Notes // So, the semaphore usage should indicate the items on the key_queue. @@ -126,9 +117,9 @@ process_input :: (thread: *Thread) -> s64 { defer dam(">STOP signal_input\n"); while(true) { if initialized == false return 0; - if key_input != Keys.None { // TODO Reading without mutex... + if key_input != Keys.None { dam("waiting.."); - sleep_milliseconds(100); + sleep_milliseconds(100); // We could increase this value as a push-back mechanism if we're just hitting it repeateadly. dam("!\n\r"); continue; } @@ -170,7 +161,7 @@ get_key :: (wait_milliseconds: s32) -> Key { defer key_resize = Keys.None; return xx key_resize; } - + defer key_input = Keys.None; return xx key_input; } @@ -186,7 +177,6 @@ dam("B"); init(*input_buffer_mutex, "input_buffer_mutex"); assert(thread_init(*input_process_thread, process_input), "Failed to initialize thread."); dam("C"); - // init(*input_semaphore); init(*key_semaphore); init(*key_mutex, "key_mutex"); dam("D"); @@ -199,10 +189,7 @@ stop :: () { if initialized == false return; initialized = false; - // signal(*input_semaphore); // TODO Maybe use tcflush ??? thread_deinit(*input_process_thread); - - // destroy(*input_semaphore); destroy(*key_semaphore); OS_reset_terminal(); diff --git a/TUI/unix.jai b/TUI/unix.jai index 1bfa400..523aeb5 100644 --- a/TUI/unix.jai +++ b/TUI/unix.jai @@ -135,8 +135,8 @@ OS_prepare_terminal :: () { raw_tio_mode.c_lflag &= ~(.ECHO | .ECHONL | .ICANON | .ISIG | .IEXTEN); raw_tio_mode.c_cflag &= ~(.CSIZE | .PARENB); raw_tio_mode.c_cflag |= .CS8; - raw_tio_mode.c_cc[Control_Chars.VMIN] = 0; - raw_tio_mode.c_cc[Control_Chars.VTIME] = 1; + raw_tio_mode.c_cc[Control_Chars.VMIN] = 1; + raw_tio_mode.c_cc[Control_Chars.VTIME] = 0; tcsetattr(STDIN_FILENO, 0, *raw_tio_mode); // TODO Log on error. } diff --git a/ttt.jai b/ttt.jai index 0515262..c834bf1 100644 --- a/ttt.jai +++ b/ttt.jai @@ -1227,8 +1227,8 @@ main :: () { key: TUI.Key = #char "d"; while(key != #char "q") { __mark := get_temporary_storage_mark(); + sleep_milliseconds(1000); key = TUI.get_key(3000); - // sleep_milliseconds(10); if key != xx TUI.Keys.None print_character(key); else write_string("-"); -- cgit v1.2.3