From c21b78b105be95bc48d31d9b55e3877c34a666b2 Mon Sep 17 00:00:00 2001 From: Tristan Riehs Date: Fri, 28 Jun 2024 16:35:27 +0900 Subject: Integrate the new text interface A couple pieces of code have been made independant from the GUI implementation: calc_data and input. --- src/tui.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/tui.c (limited to 'src/tui.c') 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 . + */ +#include +#include +#include + +#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 -- cgit v1.2.3