From 36db9ebac493aa07a08c8a92a1380d253e05718e Mon Sep 17 00:00:00 2001 From: Aakarsh Kashyap Date: Mon, 29 Jun 2026 22:27:45 +0530 Subject: input handling using SCSP ring buffer --- src/main.cpp | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 7565371..4959eef 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,6 @@ /* main.cpp - reader: RSVP-style terminal word reader */ +#include #define _POSIX_C_SOURCE 200809L #include @@ -15,18 +16,18 @@ int main(int argc, char *argv[]) { - EditorCfg *cfg; - FILE *fp; - long size; - int speed; - std::string content; - std::vector data; - size_t i; - std::string *k; + EditorCfg *cfg; + FILE *fp; + long size; + std::string content; + std::vector data; + size_t i; + std::string *k; + SCPCQueue queue(1024); cfg = (EditorCfg *)malloc(sizeof(EditorCfg)); - speed = 250000; - + cfg->speed = 250000; + int& speed = cfg->speed; if (!cfg) die("[err]: malloc failed\n"); @@ -58,6 +59,8 @@ main(int argc, char *argv[]) split(content, data, " \t\r\n,;:!?"); + std::thread input_thread(producer, std::ref(queue)); + for (;;) { for (i = 0; i < data.size(); i++) { k = &data[i]; @@ -65,16 +68,26 @@ main(int argc, char *argv[]) continue; window_size_callback(cfg); editor_refresh_scrn(cfg); + consumer(queue, cfg); { int mid = (int)k->size() / 2; int remaining = (int)k->size() - mid - 1; const char *cstr = k->c_str(); + const char message[] = "Current delay: "; + char buf[32]; + int len{}; + write(STDOUT_FILENO, cstr, mid); write(STDOUT_FILENO, "\x1b[31m", 5); write(STDOUT_FILENO, cstr + mid, 1); write(STDOUT_FILENO, "\x1b[m", 3); write(STDOUT_FILENO, cstr + mid + 1, remaining); + + write(STDOUT_FILENO, "\x1b[H", 3); + write(STDOUT_FILENO, message, sizeof(message)-1); + len = snprintf(buf, sizeof(buf), "%d", cfg->speed); + write(STDOUT_FILENO, buf, len); } usleep(speed); } -- cgit v1.2.3