summaryrefslogtreecommitdiff
path: root/src/fruits/cmc/ui
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-12-07 23:47:36 -0500
committerAndrew Opalach <andrew@akon.city> 2024-12-07 23:47:36 -0500
commitd81c406f62e996840d86333b81c41d0ae4aff347 (patch)
tree9e6baf260ec56d14e8931b61936b0d043cb49847 /src/fruits/cmc/ui
parentd4da3d8a644156b9f24b560eba58a87b912c1fef (diff)
downloadcamu-d81c406f62e996840d86333b81c41d0ae4aff347.tar.gz
camu-d81c406f62e996840d86333b81c41d0ae4aff347.tar.bz2
camu-d81c406f62e996840d86333b81c41d0ae4aff347.zip
Synced list reference 1
This marks a point where the list behavior is at least moderately robust for the skip operation. It includes fixes for multiple deep-rooted issues found by testing with input simulation. Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/fruits/cmc/ui')
-rw-r--r--src/fruits/cmc/ui/ui.c29
-rw-r--r--src/fruits/cmc/ui/ui.h18
2 files changed, 47 insertions, 0 deletions
diff --git a/src/fruits/cmc/ui/ui.c b/src/fruits/cmc/ui/ui.c
new file mode 100644
index 0000000..a838f96
--- /dev/null
+++ b/src/fruits/cmc/ui/ui.c
@@ -0,0 +1,29 @@
+#include <al/lib.h>
+
+#include "ui.h"
+
+bool cmc_ui_init(struct cmc_ui *ui)
+{
+ al_memset(ui, 0, sizeof(struct cmc_ui));
+ if (!(ui->nc = notcurses_init(NULL, stdin))) {
+ return false;
+ }
+ return true;
+}
+
+s32 cmc_ui_get_input_fd(struct cmc_ui *ui)
+{
+ return notcurses_inputready_fd(ui->nc);
+}
+
+bool cmc_ui_read_input(struct cmc_ui *ui, struct ncinput *input)
+{
+ al_memset(input, 0, sizeof(struct ncinput));
+ u32 ret = notcurses_get_nblock(ui->nc, input);
+ return !(ret == (u32)-1 || ret == 0);
+}
+
+void cmc_ui_close(struct cmc_ui *ui)
+{
+ notcurses_stop(ui->nc);
+}
diff --git a/src/fruits/cmc/ui/ui.h b/src/fruits/cmc/ui/ui.h
new file mode 100644
index 0000000..4af222e
--- /dev/null
+++ b/src/fruits/cmc/ui/ui.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <al/types.h>
+#include <notcurses/notcurses.h>
+
+struct cmc_ui {
+ struct notcurses *nc;
+ u32 term_cols;
+ u32 term_rows;
+ bool pending_layout;
+};
+
+bool cmc_ui_init(struct cmc_ui *ui);
+
+s32 cmc_ui_get_input_fd(struct cmc_ui *ui);
+bool cmc_ui_read_input(struct cmc_ui *ui, struct ncinput *input);
+
+void cmc_ui_close(struct cmc_ui *ui);