^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Derived from menuconfig.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <ctype.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <errno.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <fcntl.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <limits.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <stdarg.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <stdlib.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <string.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <unistd.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <ncurses.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <menu.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <panel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #include <form.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #include <stdio.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #include <time.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #include <sys/time.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define max(a, b) ({\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) typeof(a) _a = a;\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) typeof(b) _b = b;\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) _a > _b ? _a : _b; })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define min(a, b) ({\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) typeof(a) _a = a;\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) typeof(b) _b = b;\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) _a < _b ? _a : _b; })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) NORMAL = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) MAIN_HEADING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) MAIN_MENU_BOX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) MAIN_MENU_FORE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) MAIN_MENU_BACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) MAIN_MENU_GREY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) MAIN_MENU_HEADING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) SCROLLWIN_TEXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) SCROLLWIN_HEADING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) SCROLLWIN_BOX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) DIALOG_TEXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) DIALOG_MENU_FORE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) DIALOG_MENU_BACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) DIALOG_BOX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) INPUT_BOX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) INPUT_HEADING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) INPUT_TEXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) INPUT_FIELD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) FUNCTION_TEXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) FUNCTION_HIGHLIGHT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) ATTR_MAX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) } attributes_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) extern attributes_t attributes[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) F_HELP = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) F_SYMBOL = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) F_INSTS = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) F_CONF = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) F_BACK = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) F_SAVE = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) F_LOAD = 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) F_SEARCH = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) F_EXIT = 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) } function_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) void set_colors(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) /* this changes the windows attributes !!! */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) void print_in_middle(WINDOW *win,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) int starty,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) int startx,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) int width,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) const char *string,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) chtype color);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) int get_line_length(const char *line);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) int get_line_no(const char *text);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) const char *get_line(const char *text, int line_no);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) void fill_window(WINDOW *win, const char *text);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) int dialog_inputbox(WINDOW *main_window,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) const char *title, const char *prompt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) const char *init, char **resultp, int *result_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) void refresh_all_windows(WINDOW *main_window);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) void show_scroll_win(WINDOW *main_window,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) const char *title,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) const char *text);