diff options
author | Tristan Riehs <tristan.riehs@bordeaux-inp.fr> | 2024-06-28 16:35:27 +0900 |
---|---|---|
committer | Tristan Riehs <tristan.riehs@bordeaux-inp.fr> | 2024-06-28 16:36:35 +0900 |
commit | c21b78b105be95bc48d31d9b55e3877c34a666b2 (patch) | |
tree | eadce2696ad980e5d77ad119a5b922a67252f26f /src/tui.c | |
parent | ea9f134df9b83a7c4aa74737055a8a131c65e25d (diff) |
Integrate the new text interface
A couple pieces of code have been made independant from the GUI
implementation: calc_data and input.
Diffstat (limited to 'src/tui.c')
-rw-r--r-- | src/tui.c | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/src/tui.c b/src/tui.c new file mode 100644 index 0000000..0706b2d --- /dev/null +++ b/src/tui.c @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2024 Tristan Riehs + * + * 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/>. + */ +#include <curses.h> +#include <stdlib.h> +#include <string.h> + +#include "disp.h" +#include "calc_data.h" + +static struct calc_data calcs[CALC_COUNT] = {0}; +static int current_idx = 0; +static WINDOW *win; + +void +init(void) +{ + win = initscr(); + clear(); + refresh(); +} + +void +display_calc(int x, int y) +{ + calcs[current_idx].x = x; + calcs[current_idx].y = y; + clear(); + printw("%d + %d = ", x, y); + refresh(); +} + +int +read_input(void) +{ + char c = getchar(); + + switch(c) + { +#ifndef NDEBUG + case 'g': + case 'r': + return DISP_RELOAD; +#endif + case 'q': + return DISP_QUIT; + default: + return DISP_ERR; + } + + return DISP_ERR; +} + +void +display_res(bool right, int ms) +{ + (void) right; + (void) ms; +} + +void +destroy(void) +{ + endwin(); +} + +#ifndef NDEBUG +void * +pre_reload(void) +{ + char *data = malloc(sizeof(calcs) + sizeof(current_idx)); + memcpy(data, &calcs, sizeof(calcs)); + memcpy(data + sizeof(calcs), ¤t_idx, sizeof(current_idx)); + endwin(); + return data; +} + +void +post_reload(void *state) +{ + char *data = state; + memcpy(&calcs, data, sizeof(calcs)); + memcpy(¤t_idx, data + sizeof(calcs), sizeof(current_idx)); + free(data); + init(); +} +#endif |