Root/
Source at commit 2740 created 8 years 11 months ago. By ifabio, sync with trunk. | |
---|---|
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)␊ |
231 |