cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dialog.h (6854B)


      1/* SPDX-License-Identifier: GPL-2.0+ */
      2/*
      3 *  dialog.h -- common declarations for all dialog modules
      4 *
      5 *  AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
      6 */
      7
      8#include <sys/types.h>
      9#include <fcntl.h>
     10#include <unistd.h>
     11#include <ctype.h>
     12#include <stdlib.h>
     13#include <string.h>
     14#include <stdbool.h>
     15
     16#ifdef __sun__
     17#define CURS_MACROS
     18#endif
     19#include <ncurses.h>
     20
     21/*
     22 * Colors in ncurses 1.9.9e do not work properly since foreground and
     23 * background colors are OR'd rather than separately masked.  This version
     24 * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible
     25 * with standard curses.  The simplest fix (to make this work with standard
     26 * curses) uses the wbkgdset() function, not used in the original hack.
     27 * Turn it off if we're building with 1.9.9e, since it just confuses things.
     28 */
     29#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
     30#define OLD_NCURSES 1
     31#undef  wbkgdset
     32#define wbkgdset(w,p)		/*nothing */
     33#else
     34#define OLD_NCURSES 0
     35#endif
     36
     37#define TR(params) _tracef params
     38
     39#define KEY_ESC 27
     40#define TAB 9
     41#define MAX_LEN 2048
     42#define BUF_SIZE (10*1024)
     43#define MIN(x,y) (x < y ? x : y)
     44#define MAX(x,y) (x > y ? x : y)
     45
     46#ifndef ACS_ULCORNER
     47#define ACS_ULCORNER '+'
     48#endif
     49#ifndef ACS_LLCORNER
     50#define ACS_LLCORNER '+'
     51#endif
     52#ifndef ACS_URCORNER
     53#define ACS_URCORNER '+'
     54#endif
     55#ifndef ACS_LRCORNER
     56#define ACS_LRCORNER '+'
     57#endif
     58#ifndef ACS_HLINE
     59#define ACS_HLINE '-'
     60#endif
     61#ifndef ACS_VLINE
     62#define ACS_VLINE '|'
     63#endif
     64#ifndef ACS_LTEE
     65#define ACS_LTEE '+'
     66#endif
     67#ifndef ACS_RTEE
     68#define ACS_RTEE '+'
     69#endif
     70#ifndef ACS_UARROW
     71#define ACS_UARROW '^'
     72#endif
     73#ifndef ACS_DARROW
     74#define ACS_DARROW 'v'
     75#endif
     76
     77/* error return codes */
     78#define ERRDISPLAYTOOSMALL (KEY_MAX + 1)
     79
     80/*
     81 *   Color definitions
     82 */
     83struct dialog_color {
     84	chtype atr;	/* Color attribute */
     85	int fg;		/* foreground */
     86	int bg;		/* background */
     87	int hl;		/* highlight this item */
     88};
     89
     90struct subtitle_list {
     91	struct subtitle_list *next;
     92	const char *text;
     93};
     94
     95struct dialog_info {
     96	const char *backtitle;
     97	struct subtitle_list *subtitles;
     98	struct dialog_color screen;
     99	struct dialog_color shadow;
    100	struct dialog_color dialog;
    101	struct dialog_color title;
    102	struct dialog_color border;
    103	struct dialog_color button_active;
    104	struct dialog_color button_inactive;
    105	struct dialog_color button_key_active;
    106	struct dialog_color button_key_inactive;
    107	struct dialog_color button_label_active;
    108	struct dialog_color button_label_inactive;
    109	struct dialog_color inputbox;
    110	struct dialog_color inputbox_border;
    111	struct dialog_color searchbox;
    112	struct dialog_color searchbox_title;
    113	struct dialog_color searchbox_border;
    114	struct dialog_color position_indicator;
    115	struct dialog_color menubox;
    116	struct dialog_color menubox_border;
    117	struct dialog_color item;
    118	struct dialog_color item_selected;
    119	struct dialog_color tag;
    120	struct dialog_color tag_selected;
    121	struct dialog_color tag_key;
    122	struct dialog_color tag_key_selected;
    123	struct dialog_color check;
    124	struct dialog_color check_selected;
    125	struct dialog_color uarrow;
    126	struct dialog_color darrow;
    127};
    128
    129/*
    130 * Global variables
    131 */
    132extern struct dialog_info dlg;
    133extern char dialog_input_result[];
    134extern int saved_x, saved_y;		/* Needed in signal handler in mconf.c */
    135
    136/*
    137 * Function prototypes
    138 */
    139
    140/* item list as used by checklist and menubox */
    141void item_reset(void);
    142void item_make(const char *fmt, ...);
    143void item_add_str(const char *fmt, ...);
    144void item_set_tag(char tag);
    145void item_set_data(void *p);
    146void item_set_selected(int val);
    147int item_activate_selected(void);
    148void *item_data(void);
    149char item_tag(void);
    150
    151/* item list manipulation for lxdialog use */
    152#define MAXITEMSTR 200
    153struct dialog_item {
    154	char str[MAXITEMSTR];	/* prompt displayed */
    155	char tag;
    156	void *data;	/* pointer to menu item - used by menubox+checklist */
    157	int selected;	/* Set to 1 by dialog_*() function if selected. */
    158};
    159
    160/* list of lialog_items */
    161struct dialog_list {
    162	struct dialog_item node;
    163	struct dialog_list *next;
    164};
    165
    166extern struct dialog_list *item_cur;
    167extern struct dialog_list item_nil;
    168extern struct dialog_list *item_head;
    169
    170int item_count(void);
    171void item_set(int n);
    172int item_n(void);
    173const char *item_str(void);
    174int item_is_selected(void);
    175int item_is_tag(char tag);
    176#define item_foreach() \
    177	for (item_cur = item_head ? item_head: item_cur; \
    178	     item_cur && (item_cur != &item_nil); item_cur = item_cur->next)
    179
    180/* generic key handlers */
    181int on_key_esc(WINDOW *win);
    182int on_key_resize(void);
    183
    184/* minimum (re)size values */
    185#define CHECKLIST_HEIGTH_MIN 6	/* For dialog_checklist() */
    186#define CHECKLIST_WIDTH_MIN 6
    187#define INPUTBOX_HEIGTH_MIN 2	/* For dialog_inputbox() */
    188#define INPUTBOX_WIDTH_MIN 2
    189#define MENUBOX_HEIGTH_MIN 15	/* For dialog_menu() */
    190#define MENUBOX_WIDTH_MIN 65
    191#define TEXTBOX_HEIGTH_MIN 8	/* For dialog_textbox() */
    192#define TEXTBOX_WIDTH_MIN 8
    193#define YESNO_HEIGTH_MIN 4	/* For dialog_yesno() */
    194#define YESNO_WIDTH_MIN 4
    195#define WINDOW_HEIGTH_MIN 19	/* For init_dialog() */
    196#define WINDOW_WIDTH_MIN 80
    197
    198int init_dialog(const char *backtitle);
    199void set_dialog_backtitle(const char *backtitle);
    200void set_dialog_subtitles(struct subtitle_list *subtitles);
    201void end_dialog(int x, int y);
    202void attr_clear(WINDOW * win, int height, int width, chtype attr);
    203void dialog_clear(void);
    204void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x);
    205void print_button(WINDOW * win, const char *label, int y, int x, int selected);
    206void print_title(WINDOW *dialog, const char *title, int width);
    207void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box,
    208	      chtype border);
    209void draw_shadow(WINDOW * win, int y, int x, int height, int width);
    210
    211int first_alpha(const char *string, const char *exempt);
    212int dialog_yesno(const char *title, const char *prompt, int height, int width);
    213int dialog_msgbox(const char *title, const char *prompt, int height,
    214		  int width, int pause);
    215
    216
    217typedef void (*update_text_fn)(char *buf, size_t start, size_t end, void
    218			       *_data);
    219int dialog_textbox(const char *title, char *tbuf, int initial_height,
    220		   int initial_width, int *keys, int *_vscroll, int *_hscroll,
    221		   update_text_fn update_text, void *data);
    222int dialog_menu(const char *title, const char *prompt,
    223		const void *selected, int *s_scroll);
    224int dialog_checklist(const char *title, const char *prompt, int height,
    225		     int width, int list_height);
    226int dialog_inputbox(const char *title, const char *prompt, int height,
    227		    int width, const char *init);
    228
    229/*
    230 * This is the base for fictitious keys, which activate
    231 * the buttons.
    232 *
    233 * Mouse-generated keys are the following:
    234 *   -- the first 32 are used as numbers, in addition to '0'-'9'
    235 *   -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o')
    236 *   -- uppercase chars are used to invoke the button (M_EVENT + 'O')
    237 */
    238#define M_EVENT (KEY_MAX+1)