summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ui.c74
-rw-r--r--src/ui.h20
2 files changed, 94 insertions, 0 deletions
diff --git a/src/ui.c b/src/ui.c
new file mode 100644
index 0000000..e4fc35b
--- /dev/null
+++ b/src/ui.c
@@ -0,0 +1,74 @@
+/* parc
+ * Copyright (C) 2025 Ekaitz Zarraga <ekaitz@elenq.tech>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * XTERM escape sequence reference:
+ * https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
+ */
+
+#include <stdio.h>
+
+#define ESC '\x1b'
+
+const char CSI_LEAD[3] = { ESC, '[', '\0'};
+
+void
+ui_cursor_move (int x, int y)
+{
+ /*
+ * Also valid with CSI<L>;<C>f being <L> and <C> line number and column
+ * number respectively. In ttys, cursor starts at 1,1
+ */
+ printf ("%s%d;%dH", CSI_LEAD, y, x);
+ fflush (stdout);
+}
+
+void
+ui_cursor_show (void)
+{
+ printf ("%s?25h", CSI_LEAD);
+ fflush (stdout);
+}
+
+void
+ui_cursor_hide (void)
+{
+ printf ("%s?25l", CSI_LEAD);
+ fflush (stdout);
+}
+
+void
+ui_screen_erase (void)
+{
+ printf ("%s2J", CSI_LEAD);
+ fflush (stdout);
+}
+
+
+void
+ui_alternate_buffer_enable (void)
+{
+ printf ("%s?1049h", CSI_LEAD);
+ fflush (stdout);
+}
+
+void
+ui_alternate_buffer_disable (void)
+{
+ printf ("%s?1049l", CSI_LEAD);
+ fflush (stdout);
+}
diff --git a/src/ui.h b/src/ui.h
new file mode 100644
index 0000000..3e2bd00
--- /dev/null
+++ b/src/ui.h
@@ -0,0 +1,20 @@
+/* parc
+ * Copyright (C) 2025 Ekaitz Zarraga <ekaitz@elenq.tech>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+void ui_cursor_move (int x, int y);
+
+void ui_alternate_buffer_enable (void);
+void ui_alternate_buffer_disable (void);