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