diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ui.c | 74 | ||||
-rw-r--r-- | src/ui.h | 20 |
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); |