Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


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