1*cf5a6c84SAndroid Build Coastguard Worker /* 2*cf5a6c84SAndroid Build Coastguard Worker * dialog.h -- common declarations for all dialog modules 3*cf5a6c84SAndroid Build Coastguard Worker * 4*cf5a6c84SAndroid Build Coastguard Worker * AUTHOR: Savio Lam ([email protected]) 5*cf5a6c84SAndroid Build Coastguard Worker * 6*cf5a6c84SAndroid Build Coastguard Worker * This program is free software; you can redistribute it and/or 7*cf5a6c84SAndroid Build Coastguard Worker * modify it under the terms of the GNU General Public License 8*cf5a6c84SAndroid Build Coastguard Worker * as published by the Free Software Foundation; either version 2 9*cf5a6c84SAndroid Build Coastguard Worker * of the License, or (at your option) any later version. 10*cf5a6c84SAndroid Build Coastguard Worker * 11*cf5a6c84SAndroid Build Coastguard Worker * This program is distributed in the hope that it will be useful, 12*cf5a6c84SAndroid Build Coastguard Worker * but WITHOUT ANY WARRANTY; without even the implied warranty of 13*cf5a6c84SAndroid Build Coastguard Worker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*cf5a6c84SAndroid Build Coastguard Worker * GNU General Public License for more details. 15*cf5a6c84SAndroid Build Coastguard Worker * 16*cf5a6c84SAndroid Build Coastguard Worker * You should have received a copy of the GNU General Public License 17*cf5a6c84SAndroid Build Coastguard Worker * along with this program; if not, write to the Free Software 18*cf5a6c84SAndroid Build Coastguard Worker * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19*cf5a6c84SAndroid Build Coastguard Worker */ 20*cf5a6c84SAndroid Build Coastguard Worker 21*cf5a6c84SAndroid Build Coastguard Worker #include <sys/types.h> 22*cf5a6c84SAndroid Build Coastguard Worker #include <fcntl.h> 23*cf5a6c84SAndroid Build Coastguard Worker #include <unistd.h> 24*cf5a6c84SAndroid Build Coastguard Worker #include <ctype.h> 25*cf5a6c84SAndroid Build Coastguard Worker #include <stdlib.h> 26*cf5a6c84SAndroid Build Coastguard Worker #include <string.h> 27*cf5a6c84SAndroid Build Coastguard Worker #include <stdbool.h> 28*cf5a6c84SAndroid Build Coastguard Worker 29*cf5a6c84SAndroid Build Coastguard Worker #ifdef __sun__ 30*cf5a6c84SAndroid Build Coastguard Worker #define CURS_MACROS 31*cf5a6c84SAndroid Build Coastguard Worker #endif 32*cf5a6c84SAndroid Build Coastguard Worker #include CURSES_LOC 33*cf5a6c84SAndroid Build Coastguard Worker 34*cf5a6c84SAndroid Build Coastguard Worker /* 35*cf5a6c84SAndroid Build Coastguard Worker * Colors in ncurses 1.9.9e do not work properly since foreground and 36*cf5a6c84SAndroid Build Coastguard Worker * background colors are OR'd rather than separately masked. This version 37*cf5a6c84SAndroid Build Coastguard Worker * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible 38*cf5a6c84SAndroid Build Coastguard Worker * with standard curses. The simplest fix (to make this work with standard 39*cf5a6c84SAndroid Build Coastguard Worker * curses) uses the wbkgdset() function, not used in the original hack. 40*cf5a6c84SAndroid Build Coastguard Worker * Turn it off if we're building with 1.9.9e, since it just confuses things. 41*cf5a6c84SAndroid Build Coastguard Worker */ 42*cf5a6c84SAndroid Build Coastguard Worker #if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE) 43*cf5a6c84SAndroid Build Coastguard Worker #define OLD_NCURSES 1 44*cf5a6c84SAndroid Build Coastguard Worker #undef wbkgdset 45*cf5a6c84SAndroid Build Coastguard Worker #define wbkgdset(w,p) /*nothing */ 46*cf5a6c84SAndroid Build Coastguard Worker #else 47*cf5a6c84SAndroid Build Coastguard Worker #define OLD_NCURSES 0 48*cf5a6c84SAndroid Build Coastguard Worker #endif 49*cf5a6c84SAndroid Build Coastguard Worker 50*cf5a6c84SAndroid Build Coastguard Worker #define TR(params) _tracef params 51*cf5a6c84SAndroid Build Coastguard Worker 52*cf5a6c84SAndroid Build Coastguard Worker #define KEY_ESC 27 53*cf5a6c84SAndroid Build Coastguard Worker #define TAB 9 54*cf5a6c84SAndroid Build Coastguard Worker #define MAX_LEN 2048 55*cf5a6c84SAndroid Build Coastguard Worker #define BUF_SIZE (10*1024) 56*cf5a6c84SAndroid Build Coastguard Worker #define MIN(x,y) (x < y ? x : y) 57*cf5a6c84SAndroid Build Coastguard Worker #define MAX(x,y) (x > y ? x : y) 58*cf5a6c84SAndroid Build Coastguard Worker 59*cf5a6c84SAndroid Build Coastguard Worker #ifndef ACS_ULCORNER 60*cf5a6c84SAndroid Build Coastguard Worker #define ACS_ULCORNER '+' 61*cf5a6c84SAndroid Build Coastguard Worker #endif 62*cf5a6c84SAndroid Build Coastguard Worker #ifndef ACS_LLCORNER 63*cf5a6c84SAndroid Build Coastguard Worker #define ACS_LLCORNER '+' 64*cf5a6c84SAndroid Build Coastguard Worker #endif 65*cf5a6c84SAndroid Build Coastguard Worker #ifndef ACS_URCORNER 66*cf5a6c84SAndroid Build Coastguard Worker #define ACS_URCORNER '+' 67*cf5a6c84SAndroid Build Coastguard Worker #endif 68*cf5a6c84SAndroid Build Coastguard Worker #ifndef ACS_LRCORNER 69*cf5a6c84SAndroid Build Coastguard Worker #define ACS_LRCORNER '+' 70*cf5a6c84SAndroid Build Coastguard Worker #endif 71*cf5a6c84SAndroid Build Coastguard Worker #ifndef ACS_HLINE 72*cf5a6c84SAndroid Build Coastguard Worker #define ACS_HLINE '-' 73*cf5a6c84SAndroid Build Coastguard Worker #endif 74*cf5a6c84SAndroid Build Coastguard Worker #ifndef ACS_VLINE 75*cf5a6c84SAndroid Build Coastguard Worker #define ACS_VLINE '|' 76*cf5a6c84SAndroid Build Coastguard Worker #endif 77*cf5a6c84SAndroid Build Coastguard Worker #ifndef ACS_LTEE 78*cf5a6c84SAndroid Build Coastguard Worker #define ACS_LTEE '+' 79*cf5a6c84SAndroid Build Coastguard Worker #endif 80*cf5a6c84SAndroid Build Coastguard Worker #ifndef ACS_RTEE 81*cf5a6c84SAndroid Build Coastguard Worker #define ACS_RTEE '+' 82*cf5a6c84SAndroid Build Coastguard Worker #endif 83*cf5a6c84SAndroid Build Coastguard Worker #ifndef ACS_UARROW 84*cf5a6c84SAndroid Build Coastguard Worker #define ACS_UARROW '^' 85*cf5a6c84SAndroid Build Coastguard Worker #endif 86*cf5a6c84SAndroid Build Coastguard Worker #ifndef ACS_DARROW 87*cf5a6c84SAndroid Build Coastguard Worker #define ACS_DARROW 'v' 88*cf5a6c84SAndroid Build Coastguard Worker #endif 89*cf5a6c84SAndroid Build Coastguard Worker 90*cf5a6c84SAndroid Build Coastguard Worker /* error return codes */ 91*cf5a6c84SAndroid Build Coastguard Worker #define ERRDISPLAYTOOSMALL (KEY_MAX + 1) 92*cf5a6c84SAndroid Build Coastguard Worker 93*cf5a6c84SAndroid Build Coastguard Worker /* 94*cf5a6c84SAndroid Build Coastguard Worker * Color definitions 95*cf5a6c84SAndroid Build Coastguard Worker */ 96*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color { 97*cf5a6c84SAndroid Build Coastguard Worker chtype atr; /* Color attribute */ 98*cf5a6c84SAndroid Build Coastguard Worker int fg; /* foreground */ 99*cf5a6c84SAndroid Build Coastguard Worker int bg; /* background */ 100*cf5a6c84SAndroid Build Coastguard Worker int hl; /* highlight this item */ 101*cf5a6c84SAndroid Build Coastguard Worker }; 102*cf5a6c84SAndroid Build Coastguard Worker 103*cf5a6c84SAndroid Build Coastguard Worker struct dialog_info { 104*cf5a6c84SAndroid Build Coastguard Worker const char *backtitle; 105*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color screen; 106*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color shadow; 107*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color dialog; 108*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color title; 109*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color border; 110*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color button_active; 111*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color button_inactive; 112*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color button_key_active; 113*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color button_key_inactive; 114*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color button_label_active; 115*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color button_label_inactive; 116*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color inputbox; 117*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color inputbox_border; 118*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color searchbox; 119*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color searchbox_title; 120*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color searchbox_border; 121*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color position_indicator; 122*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color menubox; 123*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color menubox_border; 124*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color item; 125*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color item_selected; 126*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color tag; 127*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color tag_selected; 128*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color tag_key; 129*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color tag_key_selected; 130*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color check; 131*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color check_selected; 132*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color uarrow; 133*cf5a6c84SAndroid Build Coastguard Worker struct dialog_color darrow; 134*cf5a6c84SAndroid Build Coastguard Worker }; 135*cf5a6c84SAndroid Build Coastguard Worker 136*cf5a6c84SAndroid Build Coastguard Worker /* 137*cf5a6c84SAndroid Build Coastguard Worker * Global variables 138*cf5a6c84SAndroid Build Coastguard Worker */ 139*cf5a6c84SAndroid Build Coastguard Worker extern struct dialog_info dlg; 140*cf5a6c84SAndroid Build Coastguard Worker extern char dialog_input_result[]; 141*cf5a6c84SAndroid Build Coastguard Worker 142*cf5a6c84SAndroid Build Coastguard Worker /* 143*cf5a6c84SAndroid Build Coastguard Worker * Function prototypes 144*cf5a6c84SAndroid Build Coastguard Worker */ 145*cf5a6c84SAndroid Build Coastguard Worker 146*cf5a6c84SAndroid Build Coastguard Worker /* item list as used by checklist and menubox */ 147*cf5a6c84SAndroid Build Coastguard Worker void item_reset(void); 148*cf5a6c84SAndroid Build Coastguard Worker void item_make(const char *fmt, ...); 149*cf5a6c84SAndroid Build Coastguard Worker void item_add_str(const char *fmt, ...); 150*cf5a6c84SAndroid Build Coastguard Worker void item_set_tag(char tag); 151*cf5a6c84SAndroid Build Coastguard Worker void item_set_data(void *p); 152*cf5a6c84SAndroid Build Coastguard Worker void item_set_selected(int val); 153*cf5a6c84SAndroid Build Coastguard Worker int item_activate_selected(void); 154*cf5a6c84SAndroid Build Coastguard Worker void *item_data(void); 155*cf5a6c84SAndroid Build Coastguard Worker char item_tag(void); 156*cf5a6c84SAndroid Build Coastguard Worker 157*cf5a6c84SAndroid Build Coastguard Worker /* item list manipulation for lxdialog use */ 158*cf5a6c84SAndroid Build Coastguard Worker #define MAXITEMSTR 200 159*cf5a6c84SAndroid Build Coastguard Worker struct dialog_item { 160*cf5a6c84SAndroid Build Coastguard Worker char str[MAXITEMSTR]; /* promtp displayed */ 161*cf5a6c84SAndroid Build Coastguard Worker char tag; 162*cf5a6c84SAndroid Build Coastguard Worker void *data; /* pointer to menu item - used by menubox+checklist */ 163*cf5a6c84SAndroid Build Coastguard Worker int selected; /* Set to 1 by dialog_*() function if selected. */ 164*cf5a6c84SAndroid Build Coastguard Worker }; 165*cf5a6c84SAndroid Build Coastguard Worker 166*cf5a6c84SAndroid Build Coastguard Worker /* list of lialog_items */ 167*cf5a6c84SAndroid Build Coastguard Worker struct dialog_list { 168*cf5a6c84SAndroid Build Coastguard Worker struct dialog_item node; 169*cf5a6c84SAndroid Build Coastguard Worker struct dialog_list *next; 170*cf5a6c84SAndroid Build Coastguard Worker }; 171*cf5a6c84SAndroid Build Coastguard Worker 172*cf5a6c84SAndroid Build Coastguard Worker extern struct dialog_list *item_cur; 173*cf5a6c84SAndroid Build Coastguard Worker extern struct dialog_list item_nil; 174*cf5a6c84SAndroid Build Coastguard Worker extern struct dialog_list *item_head; 175*cf5a6c84SAndroid Build Coastguard Worker 176*cf5a6c84SAndroid Build Coastguard Worker int item_count(void); 177*cf5a6c84SAndroid Build Coastguard Worker void item_set(int n); 178*cf5a6c84SAndroid Build Coastguard Worker int item_n(void); 179*cf5a6c84SAndroid Build Coastguard Worker const char *item_str(void); 180*cf5a6c84SAndroid Build Coastguard Worker int item_is_selected(void); 181*cf5a6c84SAndroid Build Coastguard Worker int item_is_tag(char tag); 182*cf5a6c84SAndroid Build Coastguard Worker #define item_foreach() \ 183*cf5a6c84SAndroid Build Coastguard Worker for (item_cur = item_head ? item_head: item_cur; \ 184*cf5a6c84SAndroid Build Coastguard Worker item_cur && (item_cur != &item_nil); item_cur = item_cur->next) 185*cf5a6c84SAndroid Build Coastguard Worker 186*cf5a6c84SAndroid Build Coastguard Worker /* generic key handlers */ 187*cf5a6c84SAndroid Build Coastguard Worker int on_key_esc(WINDOW *win); 188*cf5a6c84SAndroid Build Coastguard Worker int on_key_resize(void); 189*cf5a6c84SAndroid Build Coastguard Worker 190*cf5a6c84SAndroid Build Coastguard Worker void init_dialog(const char *backtitle); 191*cf5a6c84SAndroid Build Coastguard Worker void reset_dialog(void); 192*cf5a6c84SAndroid Build Coastguard Worker void end_dialog(void); 193*cf5a6c84SAndroid Build Coastguard Worker void attr_clear(WINDOW * win, int height, int width, chtype attr); 194*cf5a6c84SAndroid Build Coastguard Worker void dialog_clear(void); 195*cf5a6c84SAndroid Build Coastguard Worker void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x); 196*cf5a6c84SAndroid Build Coastguard Worker void print_button(WINDOW * win, const char *label, int y, int x, int selected); 197*cf5a6c84SAndroid Build Coastguard Worker void print_title(WINDOW *dialog, const char *title, int width); 198*cf5a6c84SAndroid Build Coastguard Worker void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box, 199*cf5a6c84SAndroid Build Coastguard Worker chtype border); 200*cf5a6c84SAndroid Build Coastguard Worker void draw_shadow(WINDOW * win, int y, int x, int height, int width); 201*cf5a6c84SAndroid Build Coastguard Worker 202*cf5a6c84SAndroid Build Coastguard Worker int first_alpha(const char *string, const char *exempt); 203*cf5a6c84SAndroid Build Coastguard Worker int dialog_yesno(const char *title, const char *prompt, int height, int width); 204*cf5a6c84SAndroid Build Coastguard Worker int dialog_msgbox(const char *title, const char *prompt, int height, 205*cf5a6c84SAndroid Build Coastguard Worker int width, int pause); 206*cf5a6c84SAndroid Build Coastguard Worker int dialog_textbox(const char *title, const char *file, int height, int width); 207*cf5a6c84SAndroid Build Coastguard Worker int dialog_menu(const char *title, const char *prompt, 208*cf5a6c84SAndroid Build Coastguard Worker const void *selected, int *s_scroll); 209*cf5a6c84SAndroid Build Coastguard Worker int dialog_checklist(const char *title, const char *prompt, int height, 210*cf5a6c84SAndroid Build Coastguard Worker int width, int list_height); 211*cf5a6c84SAndroid Build Coastguard Worker extern char dialog_input_result[]; 212*cf5a6c84SAndroid Build Coastguard Worker int dialog_inputbox(const char *title, const char *prompt, int height, 213*cf5a6c84SAndroid Build Coastguard Worker int width, const char *init); 214*cf5a6c84SAndroid Build Coastguard Worker 215*cf5a6c84SAndroid Build Coastguard Worker /* 216*cf5a6c84SAndroid Build Coastguard Worker * This is the base for fictitious keys, which activate 217*cf5a6c84SAndroid Build Coastguard Worker * the buttons. 218*cf5a6c84SAndroid Build Coastguard Worker * 219*cf5a6c84SAndroid Build Coastguard Worker * Mouse-generated keys are the following: 220*cf5a6c84SAndroid Build Coastguard Worker * -- the first 32 are used as numbers, in addition to '0'-'9' 221*cf5a6c84SAndroid Build Coastguard Worker * -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o') 222*cf5a6c84SAndroid Build Coastguard Worker * -- uppercase chars are used to invoke the button (M_EVENT + 'O') 223*cf5a6c84SAndroid Build Coastguard Worker */ 224*cf5a6c84SAndroid Build Coastguard Worker #define M_EVENT (KEY_MAX+1) 225