Warning: That file was not part of the compilation database. It may have many parsing errors.
1 | /* |
---|---|
2 | * $Id: dialog.h,v 1.267 2013/09/22 19:06:36 tom Exp $ |
3 | * |
4 | * dialog.h -- common declarations for all dialog modules |
5 | * |
6 | * Copyright 2000-2012,2013 Thomas E. Dickey |
7 | * |
8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU Lesser General Public License, version 2.1 |
10 | * as published by the Free Software Foundation. |
11 | * |
12 | * This program is distributed in the hope that it will be useful, but |
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 | * Lesser General Public License for more details. |
16 | * |
17 | * You should have received a copy of the GNU Lesser General Public |
18 | * License along with this program; if not, write to |
19 | * Free Software Foundation, Inc. |
20 | * 51 Franklin St., Fifth Floor |
21 | * Boston, MA 02110, USA. |
22 | * |
23 | * An earlier version of this program lists as authors |
24 | * Savio Lam (lam836@cs.cuhk.hk) |
25 | */ |
26 | |
27 | #ifndef DIALOG_H_included |
28 | #define DIALOG_H_included 1 |
29 | /* *INDENT-OFF* */ |
30 | |
31 | #include <dlg_config.h> |
32 | |
33 | #ifdef __hpux |
34 | #define __HP_CURSES_COMPAT /* workaround for getattrs, etc. */ |
35 | #endif |
36 | |
37 | #include <sys/types.h> |
38 | #include <fcntl.h> |
39 | #include <unistd.h> |
40 | #include <ctype.h> |
41 | #include <stdlib.h> |
42 | #include <stdarg.h> |
43 | #include <string.h> |
44 | #include <signal.h> /* fork() etc. */ |
45 | #include <math.h> /* sqrt() */ |
46 | |
47 | /* header conflict with Solaris xpg4 versus <sys/regset.h> */ |
48 | #if defined(ERR) && (ERR == 13) |
49 | #undef ERR |
50 | #endif |
51 | |
52 | #if defined(DLG_HAVE_NCURSESW_NCURSES_H) |
53 | #include <ncursesw/ncurses.h> |
54 | #elif defined(DLG_HAVE_NCURSES_NCURSES_H) |
55 | #include <ncurses/ncurses.h> |
56 | #elif defined(DLG_HAVE_NCURSES_CURSES_H) |
57 | #include <ncurses/curses.h> |
58 | #elif defined(DLG_HAVE_NCURSES_H) |
59 | #include <ncurses.h> |
60 | #else |
61 | #include <curses.h> |
62 | #if defined(DLG_HAVE_UNCTRL_H) |
63 | #include <unctrl.h> /* most curses.h headers include this, some do not */ |
64 | #endif |
65 | #endif |
66 | |
67 | /* Solaris xpg4 renames these */ |
68 | #ifndef KEY_MAX |
69 | #ifdef __KEY_MAX |
70 | #define KEY_MAX __KEY_MAX |
71 | #endif |
72 | #endif |
73 | |
74 | #ifndef KEY_MIN |
75 | #ifdef __KEY_MIN |
76 | #define KEY_MIN __KEY_MIN |
77 | #endif |
78 | #endif |
79 | |
80 | /* possible conflicts with <term.h> which may be included in <curses.h> */ |
81 | #ifdef color_names |
82 | #undef color_names |
83 | #endif |
84 | |
85 | #ifdef buttons |
86 | #undef buttons |
87 | #endif |
88 | |
89 | #ifdef DLG_ENABLE_NLS |
90 | #include <libintl.h> |
91 | #include <langinfo.h> |
92 | #define _(s) dgettext(DLG_PACKAGE, s) |
93 | #else |
94 | #undef _ |
95 | #define _(s) s |
96 | #endif |
97 | |
98 | #ifndef GCC_PRINTFLIKE |
99 | #define GCC_PRINTFLIKE(fmt,var) /*nothing*/ |
100 | #endif |
101 | |
102 | #ifndef GCC_NORETURN |
103 | #define GCC_NORETURN /*nothing*/ |
104 | #endif |
105 | |
106 | #ifndef GCC_UNUSED |
107 | #define GCC_UNUSED /*nothing*/ |
108 | #endif |
109 | |
110 | #ifndef DLG_HAVE_WGET_WCH |
111 | #undef DLG_USE_WIDE_CURSES |
112 | #endif |
113 | |
114 | /* |
115 | * FIXME: a configure check would be useful |
116 | */ |
117 | #ifdef __hpux |
118 | #undef ACS_UARROW |
119 | #undef ACS_DARROW |
120 | #undef ACS_BLOCK |
121 | #endif |
122 | |
123 | /* |
124 | * Change these if you want |
125 | */ |
126 | #define USE_SHADOW TRUE |
127 | #define USE_COLORS TRUE |
128 | |
129 | #ifdef DLG_HAVE_COLOR |
130 | #define SCOLS (COLS - (dialog_state.use_shadow ? 2 : 0)) |
131 | #define SLINES (LINES - (dialog_state.use_shadow ? 1 : 0)) |
132 | #else |
133 | #define SCOLS COLS |
134 | #define SLINES LINES |
135 | #endif |
136 | |
137 | #define DLG_EXIT_ESC 255 |
138 | #define DLG_EXIT_UNKNOWN -2 /* never return this (internal use) */ |
139 | #define DLG_EXIT_ERROR -1 /* the shell sees this as 255 */ |
140 | #define DLG_EXIT_OK 0 |
141 | #define DLG_EXIT_CANCEL 1 |
142 | #define DLG_EXIT_HELP 2 |
143 | #define DLG_EXIT_EXTRA 3 |
144 | #define DLG_EXIT_ITEM_HELP 4 /* actually DLG_EXIT_HELP */ |
145 | |
146 | #define DLG_CTRL(n) ((n) & 0x1f) /* CTRL is preferred, but conflicts */ |
147 | |
148 | #define CHR_HELP DLG_CTRL('E') |
149 | #define CHR_BACKSPACE DLG_CTRL('H') |
150 | #define CHR_REPAINT DLG_CTRL('L') |
151 | #define CHR_KILL DLG_CTRL('U') |
152 | #define CHR_LITERAL DLG_CTRL('V') |
153 | #define CHR_DELETE 127 |
154 | #define CHR_NEXT DLG_CTRL('N') |
155 | #define CHR_PREVIOUS DLG_CTRL('P') |
156 | #define CHR_TRACE DLG_CTRL('T') |
157 | |
158 | #define ESC 27 |
159 | #define TAB DLG_CTRL('I') |
160 | |
161 | #define MARGIN 1 |
162 | #define GUTTER 2 |
163 | #define SHADOW_ROWS 1 |
164 | #define SHADOW_COLS 2 |
165 | #define ARROWS_COL 5 |
166 | |
167 | #define MAX_LEN 2048 |
168 | #define BUF_SIZE (10L*1024) |
169 | |
170 | #undef MIN |
171 | #define MIN(x,y) ((x) < (y) ? (x) : (y)) |
172 | |
173 | #undef MAX |
174 | #define MAX(x,y) ((x) > (y) ? (x) : (y)) |
175 | |
176 | #define DEFAULT_SEPARATE_STR "\t" |
177 | #define DEFAULT_ASPECT_RATIO 9 |
178 | /* how many spaces is a tab long (default)? */ |
179 | #define TAB_LEN 8 |
180 | #define WTIMEOUT_VAL 10 /* minimum amount of time needed for curses */ |
181 | |
182 | #ifndef A_CHARTEXT |
183 | #define A_CHARTEXT 0xff |
184 | #endif |
185 | |
186 | #define CharOf(ch) ((ch) & 0xff) |
187 | |
188 | #ifndef ACS_ULCORNER |
189 | #define ACS_ULCORNER '+' |
190 | #endif |
191 | #ifndef ACS_LLCORNER |
192 | #define ACS_LLCORNER '+' |
193 | #endif |
194 | #ifndef ACS_URCORNER |
195 | #define ACS_URCORNER '+' |
196 | #endif |
197 | #ifndef ACS_LRCORNER |
198 | #define ACS_LRCORNER '+' |
199 | #endif |
200 | #ifndef ACS_HLINE |
201 | #define ACS_HLINE '-' |
202 | #endif |
203 | #ifndef ACS_VLINE |
204 | #define ACS_VLINE '|' |
205 | #endif |
206 | #ifndef ACS_LTEE |
207 | #define ACS_LTEE '+' |
208 | #endif |
209 | #ifndef ACS_RTEE |
210 | #define ACS_RTEE '+' |
211 | #endif |
212 | #ifndef ACS_UARROW |
213 | #define ACS_UARROW '^' |
214 | #endif |
215 | #ifndef ACS_DARROW |
216 | #define ACS_DARROW 'v' |
217 | #endif |
218 | #ifndef ACS_BLOCK |
219 | #define ACS_BLOCK '#' |
220 | #endif |
221 | |
222 | /* these definitions may work for antique versions of curses */ |
223 | #ifndef DLG_HAVE_GETBEGYX |
224 | #undef getbegyx |
225 | #define getbegyx(win,y,x) (y = (win)?(win)->_begy:ERR, x = (win)?(win)->_begx:ERR) |
226 | #endif |
227 | |
228 | #ifndef DLG_HAVE_GETMAXYX |
229 | #undef getmaxyx |
230 | #define getmaxyx(win,y,x) (y = (win)?(win)->_maxy:ERR, x = (win)?(win)->_maxx:ERR) |
231 | #endif |
232 | |
233 | #ifndef DLG_HAVE_GETPARYX |
234 | #undef getparyx |
235 | #define getparyx(win,y,x) (y = (win)?(win)->_pary:ERR, x = (win)?(win)->_parx:ERR) |
236 | #endif |
237 | |
238 | #if !defined(DLG_HAVE_WGETPARENT) && defined(DLG_HAVE_WINDOW__PARENT) |
239 | #undef wgetparent |
240 | #define wgetparent(win) ((win) ? (win)->_parent : 0) |
241 | #endif |
242 | |
243 | #if !defined(DLG_HAVE_WSYNCUP) |
244 | #undef wsyncup |
245 | #define wsyncup(win) /* nothing */ |
246 | #endif |
247 | |
248 | #if !defined(DLG_HAVE_WCURSYNCUP) |
249 | #undef wcursyncup |
250 | #define wcursyncup(win) /* nothing */ |
251 | #endif |
252 | |
253 | #ifdef __cplusplus |
254 | extern "C"{ |
255 | #endif |
256 | |
257 | /* these definitions may be needed for bleeding-edge curses implementations */ |
258 | #if !(defined(DLG_HAVE_GETBEGX) && defined(DLG_HAVE_GETBEGY)) |
259 | #undef getbegx |
260 | #undef getbegy |
261 | #define getbegx(win) dlg_getbegx(win) |
262 | #define getbegy(win) dlg_getbegy(win) |
263 | extern int dlg_getbegx(WINDOW * /*win*/); |
264 | extern int dlg_getbegy(WINDOW * /*win*/); |
265 | #endif |
266 | |
267 | #if !(defined(DLG_HAVE_GETCURX) && defined(DLG_HAVE_GETCURY)) |
268 | #undef getcurx |
269 | #undef getcury |
270 | #define getcurx(win) dlg_getcurx(win) |
271 | #define getcury(win) dlg_getcury(win) |
272 | extern int dlg_getcurx(WINDOW * /*win*/); |
273 | extern int dlg_getcury(WINDOW * /*win*/); |
274 | #endif |
275 | |
276 | #if !(defined(DLG_HAVE_GETMAXX) && defined(DLG_HAVE_GETMAXY)) |
277 | #undef getmaxx |
278 | #undef getmaxy |
279 | #define getmaxx(win) dlg_getmaxx(win) |
280 | #define getmaxy(win) dlg_getmaxy(win) |
281 | extern int dlg_getmaxx(WINDOW * /*win*/); |
282 | extern int dlg_getmaxy(WINDOW * /*win*/); |
283 | #endif |
284 | |
285 | #if !(defined(DLG_HAVE_GETPARX) && defined(DLG_HAVE_GETPARY)) |
286 | #undef getparx |
287 | #undef getpary |
288 | #define getparx(win) dlg_getparx(win) |
289 | #define getpary(win) dlg_getpary(win) |
290 | extern int dlg_getparx(WINDOW * /*win*/); |
291 | extern int dlg_getpary(WINDOW * /*win*/); |
292 | #endif |
293 | |
294 | #if !(defined(DLG_HAVE_WGETPARENT) && defined(DLG_HAVE_WINDOW__PARENT)) |
295 | #undef wgetparent |
296 | #define wgetparent(win) dlg_wgetparent(win) |
297 | extern WINDOW * dlg_wgetparent(WINDOW * /*win*/); |
298 | #endif |
299 | |
300 | /* |
301 | * This is a list of "old" names, which should be helpful in updating |
302 | * applications that use libdialog. Starting with 2003/11/26, all exported |
303 | * symbols from libdialog have "dlg_" prefix, or "dialog_" prefix or "_dialog" |
304 | * suffix (or suffix "_dialog", e.g., init_dialog). |
305 | */ |
306 | #ifdef __DIALOG_OLD_NAMES__ |
307 | #define color_table dlg_color_table |
308 | #define attr_clear(win,h,w,a) dlg_attr_clear(win,h,w,a) |
309 | #define auto_size(t,s,h,w,xl,mc) dlg_auto_size(t,s,h,w,xl,mc) |
310 | #define auto_sizefile(t,f,h,w,xl,mc) dlg_auto_sizefile(t,f,h,w,xl,mc) |
311 | #define beeping() dlg_beeping() |
312 | #define box_x_ordinate(w) dlg_box_x_ordinate(w) |
313 | #define box_y_ordinate(h) dlg_box_y_ordinate(h) |
314 | #define calc_listh(h,lh,in) dlg_calc_listh(h,lh,in) |
315 | #define calc_listw(in,items,group) dlg_calc_listw(in,items,group) |
316 | #define color_setup() dlg_color_setup() |
317 | #define create_rc(f) dlg_create_rc(f) |
318 | #define ctl_size(h,w) dlg_ctl_size(h,w) |
319 | #define del_window(win) dlg_del_window(win) |
320 | #define dialog_clear() dlg_clear() |
321 | #define draw_bottom_box(win) dlg_draw_bottom_box(win) |
322 | #define draw_box(win,y,x,h,w,xc,bc) dlg_draw_box(win,y,x,h,w,xc,bc) |
323 | #define draw_shadow(win,h,w,y,x) dlg_draw_shadow(win,h,w,y,x) |
324 | #define draw_title(win,t) dlg_draw_title(win,t) |
325 | #define exiterr dlg_exiterr |
326 | #define killall_bg(n) dlg_killall_bg(n) |
327 | #define mouse_bigregion(y,x) dlg_mouse_bigregion(y,x) |
328 | #define mouse_free_regions() dlg_mouse_free_regions() |
329 | #define mouse_mkbigregion(y,x,h,w,n,ix,iy,m) dlg_mouse_mkbigregion(y,x,h,w,n,ix,iy,m) |
330 | #define mouse_mkregion(y,x,h,w,n) dlg_mouse_mkregion(y,x,h,w,n) |
331 | #define mouse_region(y,x) dlg_mouse_region(y,x) |
332 | #define mouse_setbase(x,y) dlg_mouse_setbase(x,y) |
333 | #define mouse_setcode(c) dlg_mouse_setcode(c) |
334 | #define mouse_wgetch(w,c) dlg_mouse_wgetch(w,c) |
335 | #define new_window(h,w,y,x) dlg_new_window(h,w,y,x) |
336 | #define parse_rc() dlg_parse_rc() |
337 | #define print_autowrap(win,s,h,w) dlg_print_autowrap(win,s,h,w) |
338 | #define print_size(h,w) dlg_print_size(h,w) |
339 | #define put_backtitle() dlg_put_backtitle() |
340 | #define strclone(cprompt) dlg_strclone(cprompt) |
341 | #define sub_window(win,h,w,y,x) dlg_sub_window(win,h,w,y,x) |
342 | #define tab_correct_str(s) dlg_tab_correct_str(s) |
343 | #endif |
344 | |
345 | /* |
346 | * Attribute names |
347 | */ |
348 | #define DIALOG_ATR(n) dlg_color_table[n].atr |
349 | |
350 | #define screen_attr DIALOG_ATR(0) |
351 | #define shadow_attr DIALOG_ATR(1) |
352 | #define dialog_attr DIALOG_ATR(2) |
353 | #define title_attr DIALOG_ATR(3) |
354 | #define border_attr DIALOG_ATR(4) |
355 | #define button_active_attr DIALOG_ATR(5) |
356 | #define button_inactive_attr DIALOG_ATR(6) |
357 | #define button_key_active_attr DIALOG_ATR(7) |
358 | #define button_key_inactive_attr DIALOG_ATR(8) |
359 | #define button_label_active_attr DIALOG_ATR(9) |
360 | #define button_label_inactive_attr DIALOG_ATR(10) |
361 | #define inputbox_attr DIALOG_ATR(11) |
362 | #define inputbox_border_attr DIALOG_ATR(12) |
363 | #define searchbox_attr DIALOG_ATR(13) |
364 | #define searchbox_title_attr DIALOG_ATR(14) |
365 | #define searchbox_border_attr DIALOG_ATR(15) |
366 | #define position_indicator_attr DIALOG_ATR(16) |
367 | #define menubox_attr DIALOG_ATR(17) |
368 | #define menubox_border_attr DIALOG_ATR(18) |
369 | #define item_attr DIALOG_ATR(19) |
370 | #define item_selected_attr DIALOG_ATR(20) |
371 | #define tag_attr DIALOG_ATR(21) |
372 | #define tag_selected_attr DIALOG_ATR(22) |
373 | #define tag_key_attr DIALOG_ATR(23) |
374 | #define tag_key_selected_attr DIALOG_ATR(24) |
375 | #define check_attr DIALOG_ATR(25) |
376 | #define check_selected_attr DIALOG_ATR(26) |
377 | #define uarrow_attr DIALOG_ATR(27) |
378 | #define darrow_attr DIALOG_ATR(28) |
379 | #define itemhelp_attr DIALOG_ATR(29) |
380 | #define form_active_text_attr DIALOG_ATR(30) |
381 | #define form_text_attr DIALOG_ATR(31) |
382 | #define form_item_readonly_attr DIALOG_ATR(32) |
383 | #define gauge_attr DIALOG_ATR(33) |
384 | #define border2_attr DIALOG_ATR(34) |
385 | #define inputbox_border2_attr DIALOG_ATR(35) |
386 | #define searchbox_border2_attr DIALOG_ATR(36) |
387 | #define menubox_border2_attr DIALOG_ATR(37) |
388 | |
389 | #define DLGK_max (KEY_MAX + 256) |
390 | |
391 | /* |
392 | * Callbacks are used to implement the "background" tailbox. |
393 | */ |
394 | struct _dlg_callback; |
395 | |
396 | typedef void (*DIALOG_FREEBACK) (struct _dlg_callback * /* p */); |
397 | |
398 | typedef struct _dlg_callback { |
399 | struct _dlg_callback *next; |
400 | FILE *input; |
401 | WINDOW *win; |
402 | bool keep_bg; /* keep in background, on exit */ |
403 | bool bg_task; /* true if this is background task */ |
404 | bool (*handle_getc)(struct _dlg_callback *p, int ch, int fkey, int *result); |
405 | bool keep_win; /* true to not erase window on exit */ |
406 | /* data for dlg_add_callback_ref */ |
407 | struct _dlg_callback **caller; |
408 | DIALOG_FREEBACK freeback; |
409 | /* 1.1-20110107 */ |
410 | bool (*handle_input)(struct _dlg_callback *p); |
411 | bool input_ready; |
412 | } DIALOG_CALLBACK; |
413 | |
414 | typedef struct _dlg_windows { |
415 | struct _dlg_windows *next; |
416 | WINDOW *normal; |
417 | WINDOW *shadow; |
418 | } DIALOG_WINDOWS; |
419 | |
420 | /* |
421 | * Global variables, which are initialized as needed |
422 | */ |
423 | typedef struct { |
424 | DIALOG_CALLBACK *getc_callbacks; |
425 | DIALOG_CALLBACK *getc_redirect; |
426 | DIALOG_WINDOWS *all_windows; |
427 | DIALOG_WINDOWS *all_subwindows; |
428 | FILE *output; /* option "--output-fd fd" */ |
429 | FILE *pipe_input; /* used for gauge widget */ |
430 | FILE *screen_output; /* newterm(), etc. */ |
431 | bool screen_initialized; |
432 | bool use_colors; /* use colors by default? */ |
433 | bool use_scrollbar; /* option "--scrollbar" */ |
434 | bool use_shadow; /* shadow dialog boxes by default? */ |
435 | bool visit_items; /* option "--visit-items" */ |
436 | char *separate_str; /* option "--separate-widget string" */ |
437 | int aspect_ratio; /* option "--aspect ratio" */ |
438 | int output_count; /* # of widgets that may have done output */ |
439 | int tab_len; /* option "--tab-len n" */ |
440 | /* 1.0-20070227 */ |
441 | FILE *input; /* option "--input-fd fd" */ |
442 | #ifdef DLG_HAVE_DLG_TRACE |
443 | FILE *trace_output; /* option "--trace file" */ |
444 | #endif |
445 | /* 1.1-20110106 */ |
446 | bool no_mouse; /* option "--no-mouse" */ |
447 | int visit_cols; /* option "--visit-items" */ |
448 | /* 1.2-20130922 */ |
449 | bool finish_string; /* caching optimization for gauge */ |
450 | } DIALOG_STATE; |
451 | |
452 | extern DIALOG_STATE dialog_state; |
453 | |
454 | /* |
455 | * Global variables, which dialog resets before each widget |
456 | */ |
457 | typedef struct { |
458 | bool beep_after_signal; /* option "--beep-after" */ |
459 | bool beep_signal; /* option "--beep" */ |
460 | bool begin_set; /* option "--begin y x" was used */ |
461 | bool cant_kill; /* option "--no-kill" */ |
462 | bool colors; /* option "--colors" */ |
463 | bool cr_wrap; /* option "--cr-wrap" */ |
464 | bool defaultno; /* option "--defaultno" */ |
465 | bool dlg_clear_screen; /* option "--clear" */ |
466 | bool extra_button; /* option "--extra-button" */ |
467 | bool help_button; /* option "--help-button" */ |
468 | bool help_status; /* option "--help-status" */ |
469 | bool input_menu; /* menu vs inputmenu widget */ |
470 | bool insecure; /* option "--insecure" */ |
471 | bool item_help; /* option "--item-help" */ |
472 | bool keep_window; /* option "--keep-window" */ |
473 | bool nocancel; /* option "--no-cancel" */ |
474 | bool nocollapse; /* option "--no-collapse" */ |
475 | bool print_siz; /* option "--print-size" */ |
476 | bool separate_output; /* option "--separate-output" */ |
477 | bool single_quoted; /* option "--single-quoted" */ |
478 | bool size_err; /* option "--size-err" */ |
479 | bool tab_correct; /* option "--tab-correct" */ |
480 | bool trim_whitespace; /* option "--trim" */ |
481 | char *backtitle; /* option "--backtitle backtitle" */ |
482 | char *cancel_label; /* option "--cancel-label string" */ |
483 | char *default_item; /* option "--default-item string" */ |
484 | char *exit_label; /* option "--exit-label string" */ |
485 | char *extra_label; /* option "--extra-label string" */ |
486 | char *help_label; /* option "--help-label string" */ |
487 | char *input_result; |
488 | char *no_label; /* option "--no-label string" */ |
489 | char *ok_label; /* option "--ok-label string" */ |
490 | char *title; /* option "--title title" */ |
491 | char *yes_label; /* option "--yes-label string" */ |
492 | int begin_x; /* option "--begin y x" (second value) */ |
493 | int begin_y; /* option "--begin y x" (first value) */ |
494 | int max_input; /* option "--max-input size" */ |
495 | int scale_factor; /* RESERVED */ |
496 | int sleep_secs; /* option "--sleep secs" */ |
497 | int timeout_secs; /* option "--timeout secs" */ |
498 | unsigned input_length; /* nonzero if input_result is allocated */ |
499 | /* 1.0-20051207 */ |
500 | unsigned formitem_type; /* DIALOG_FORMITEM.type in dialog_form() */ |
501 | /* 1.1-20070227 */ |
502 | bool keep_tite; /* option "--keep-tite" */ |
503 | bool ascii_lines; /* option "--ascii-lines" */ |
504 | bool no_lines; /* option "--no-lines" */ |
505 | /* 1.1-20070930 */ |
506 | bool nook; /* option "--no-ok" */ |
507 | /* 1.1-20080727 */ |
508 | bool quoted; /* option "--quoted" */ |
509 | char *column_header; /* RESERVED "--column-header" */ |
510 | char *column_separator; /* option "--column-separator" */ |
511 | char *output_separator; /* option "--output-separator" */ |
512 | /* 1.1-20100118 */ |
513 | char *date_format; /* option "--date-format" */ |
514 | char *time_format; /* option "--time-format" */ |
515 | /* 1.1-20110629 */ |
516 | char *help_line; /* option "--hline" */ |
517 | char *help_file; /* option "--hfile" */ |
518 | bool in_helpfile; /* flag to prevent recursion in --hfile */ |
519 | bool no_nl_expand; /* option "--no-nl-expand" */ |
520 | /* 1.1-20120701 */ |
521 | int default_button; /* option "--default-button" (exit code) */ |
522 | /* 1.1-20121218 */ |
523 | bool no_tags; /* option "--no-tags" */ |
524 | bool no_items; /* option "--no-items" */ |
525 | /* 1.2-20130315 */ |
526 | bool last_key; /* option "--last-key" */ |
527 | /* 1.2-20130902 */ |
528 | bool help_tags; /* option "--help-tags" */ |
529 | } DIALOG_VARS; |
530 | |
531 | #define USE_ITEM_HELP(s) (dialog_vars.item_help && (s) != 0) |
532 | |
533 | /* |
534 | * Some settings change the number of data items per row which dialog reads |
535 | * from a script. |
536 | */ |
537 | #define DLG__NO_ITEMS (dialog_vars.no_items ? 0 : 1) |
538 | #define DLG__ITEM_HELP (dialog_vars.item_help ? 1 : 0) |
539 | |
540 | /* |
541 | * These are the total number of data items per row used for each widget type. |
542 | */ |
543 | #define CHECKBOX_TAGS (2 + DLG__ITEM_HELP + DLG__NO_ITEMS) |
544 | #define MENUBOX_TAGS (1 + DLG__ITEM_HELP + DLG__NO_ITEMS) |
545 | #define FORMBOX_TAGS (8 + DLG__ITEM_HELP) |
546 | #define MIXEDFORM_TAGS (1 + FORMBOX_TAGS) |
547 | #define MIXEDGAUGE_TAGS 2 |
548 | #define TREEVIEW_TAGS (3 + DLG__ITEM_HELP + DLG__NO_ITEMS) |
549 | |
550 | extern DIALOG_VARS dialog_vars; |
551 | |
552 | #ifndef DLG_HAVE_TYPE_CHTYPE |
553 | #define chtype long |
554 | #endif |
555 | |
556 | #define UCH(ch) ((unsigned char)(ch)) |
557 | |
558 | #define assert_ptr(ptr,msg) if ((ptr) == 0) dlg_exiterr("cannot allocate memory in " msg) |
559 | |
560 | #define dlg_malloc(t,n) (t *) malloc((size_t)(n) * sizeof(t)) |
561 | #define dlg_calloc(t,n) (t *) calloc((size_t)(n), sizeof(t)) |
562 | #define dlg_realloc(t,n,p) (t *) realloc((p), (n) * sizeof(t)) |
563 | |
564 | /* |
565 | * Table for attribute- and color-values. |
566 | */ |
567 | typedef struct { |
568 | chtype atr; |
569 | #ifdef DLG_HAVE_COLOR |
570 | int fg; |
571 | int bg; |
572 | int hilite; |
573 | #endif |
574 | #ifdef DLG_HAVE_RC_FILE |
575 | const char *name; |
576 | const char *comment; |
577 | #endif |
578 | } DIALOG_COLORS; |
579 | |
580 | extern DIALOG_COLORS dlg_color_table[]; |
581 | |
582 | /* |
583 | * Function prototypes |
584 | */ |
585 | extern const char *dialog_version(void); |
586 | |
587 | /* widgets, each in separate files */ |
588 | extern int dialog_buildlist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, char ** /*items*/, int /*order_mode*/); |
589 | extern int dialog_calendar(const char * /*title*/, const char * /*subtitle*/, int /*height*/, int /*width*/, int /*day*/, int /*month*/, int /*year*/); |
590 | extern int dialog_checklist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, char ** /*items*/, int /*flag*/); |
591 | extern int dialog_dselect(const char * /*title*/, const char * /*path*/, int /*height*/, int /*width*/); |
592 | extern int dialog_editbox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/); |
593 | extern int dialog_form(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*form_height*/, int /*item_no*/, char ** /*items*/); |
594 | extern int dialog_fselect(const char * /*title*/, const char * /*path*/, int /*height*/, int /*width*/); |
595 | extern int dialog_gauge(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*percent*/); |
596 | extern int dialog_helpfile(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/); |
597 | extern int dialog_inputbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, const char * /*init*/, const int /*password*/); |
598 | extern int dialog_menu(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*menu_height*/, int /*item_no*/, char ** /*items*/); |
599 | extern int dialog_mixedform(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*form_height*/, int /*item_no*/, char ** /*items*/); |
600 | extern int dialog_mixedgauge(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*percent*/, int /*item_no*/, char ** /*items*/); |
601 | extern int dialog_msgbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*pauseopt*/); |
602 | extern int dialog_pause(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*seconds*/); |
603 | extern int dialog_prgbox(const char * /*title*/, const char * /*cprompt*/, const char * /*command*/, int /*height*/, int /*width*/, int /*pauseopt*/); |
604 | extern int dialog_progressbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/); |
605 | extern int dialog_rangebox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/, int /*min_value*/, int /*max_value*/, int /*default_value*/); |
606 | extern int dialog_tailbox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/, int /*bg_task*/); |
607 | extern int dialog_textbox(const char * /*title*/, const char * /*file*/, int /*height*/, int /*width*/); |
608 | extern int dialog_timebox(const char * /*title*/, const char * /*subtitle*/, int /*height*/, int /*width*/, int /*hour*/, int /*minute*/, int /*second*/); |
609 | extern int dialog_treeview(const char * /*title*/, const char * /*subtitle*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, char ** /*items*/, int /*flag*/); |
610 | extern int dialog_yesno(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/); |
611 | |
612 | /* some widgets have alternate entrypoints, to allow list manipulation */ |
613 | typedef struct { |
614 | char *name; |
615 | char *text; |
616 | char *help; |
617 | int state; |
618 | } DIALOG_LISTITEM; |
619 | |
620 | typedef struct { |
621 | unsigned type; /* the field type (0=input, 1=password) */ |
622 | char *name; /* the field label */ |
623 | int name_len; /* ...its length */ |
624 | int name_y; /* ...its y-ordinate */ |
625 | int name_x; /* ...its x-ordinate */ |
626 | bool name_free; /* ...true if .name can be freed */ |
627 | char *text; /* the field contents */ |
628 | int text_len; /* ...its length on the screen */ |
629 | int text_y; /* ...its y-ordinate */ |
630 | int text_x; /* ...its x-ordinate */ |
631 | int text_flen; /* ...its length on screen, or 0 if no input allowed */ |
632 | int text_ilen; /* ...its limit on amount to be entered */ |
633 | bool text_free; /* ...true if .text can be freed */ |
634 | char *help; /* help-message, if any */ |
635 | bool help_free; /* ...true if .help can be freed */ |
636 | } DIALOG_FORMITEM; |
637 | |
638 | typedef int (DIALOG_INPUTMENU) (DIALOG_LISTITEM * /*items*/, int /*current*/, char * /*newtext*/); |
639 | |
640 | extern int dlg_checklist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, const char * /*states*/, int /*flag*/, int * /*current_item*/); |
641 | extern int dlg_form(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*form_height*/, int /*item_no*/, DIALOG_FORMITEM * /*items*/, int * /*current_item*/); |
642 | extern int dlg_menu(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*menu_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, int * /*current_item*/, DIALOG_INPUTMENU /*rename_menu*/); |
643 | extern int dlg_progressbox(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*pauseopt*/, FILE * /* fp */); |
644 | |
645 | /* argv.c */ |
646 | extern char ** dlg_string_to_argv(char * /* blob */); |
647 | extern int dlg_count_argv(char ** /* argv */); |
648 | extern int dlg_eat_argv(int * /* argcp */, char *** /* argvp */, int /* start */, int /* count */); |
649 | |
650 | /* arrows.c */ |
651 | extern void dlg_draw_arrows(WINDOW * /*dialog*/, int /*top_arrow*/, int /*bottom_arrow*/, int /*x*/, int /*top*/, int /*bottom*/); |
652 | extern void dlg_draw_arrows2(WINDOW * /*dialog*/, int /*top_arrow*/, int /*bottom_arrow*/, int /*x*/, int /*top*/, int /*bottom*/, chtype /*attr*/, chtype /*borderattr*/); |
653 | extern void dlg_draw_helpline(WINDOW * /*dialog*/, bool /*decorations*/); |
654 | extern void dlg_draw_scrollbar(WINDOW * /*dialog*/, long /* first_data */, long /* this_data */, long /* next_data */, long /* total_data */, int /* left */, int /* right */, int /*top*/, int /*bottom*/, chtype /*attr*/, chtype /*borderattr*/); |
655 | |
656 | /* buildlist.c */ |
657 | extern int dlg_buildlist(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, const char * /*states*/, int /*order_mode*/, int * /*current_item*/); |
658 | |
659 | /* buttons.c */ |
660 | extern const char ** dlg_exit_label(void); |
661 | extern const char ** dlg_ok_label(void); |
662 | extern const char ** dlg_ok_labels(void); |
663 | extern const char ** dlg_yes_labels(void); |
664 | extern int dlg_button_count(const char ** /*labels*/); |
665 | extern int dlg_button_to_char(const char * /*label*/); |
666 | extern int dlg_button_x_step(const char ** /*labels*/, int /*limit*/, int * /*gap*/, int * /*margin*/, int * /*step*/); |
667 | extern int dlg_char_to_button(int /*ch*/, const char ** /*labels*/); |
668 | extern int dlg_exit_buttoncode(int /*button*/); |
669 | extern int dlg_match_char(int /*ch*/, const char * /*string*/); |
670 | extern int dlg_next_button(const char ** /*labels*/, int /*button*/); |
671 | extern int dlg_next_ok_buttonindex(int /*current*/, int /*extra*/); |
672 | extern int dlg_ok_buttoncode(int /*button*/); |
673 | extern int dlg_prev_button(const char ** /*labels*/, int /*button*/); |
674 | extern int dlg_prev_ok_buttonindex(int /*current*/, int /*extra*/); |
675 | extern int dlg_yes_buttoncode(int /*button*/); |
676 | extern void dlg_button_layout(const char ** /*labels*/, int * /*limit*/); |
677 | extern void dlg_button_sizes(const char ** /*labels*/, int /*vertical*/, int * /*longest*/, int * /*length*/); |
678 | extern void dlg_draw_buttons(WINDOW * /*win*/, int /*y*/, int /*x*/, const char ** /*labels*/, int /*selected*/, int /*vertical*/, int /*limit*/); |
679 | |
680 | /* columns.c */ |
681 | extern void dlg_align_columns(char ** /* target */, int /* per_row */, int /* num_rows */); |
682 | extern void dlg_free_columns(char ** /* target */, int /* per_row */, int /* num_rows */); |
683 | |
684 | /* editbox.c */ |
685 | extern int dlg_editbox(const char * /*title*/, char *** /*list*/, int * /*rows*/, int /*height*/, int /*width*/); |
686 | |
687 | /* formbox.c */ |
688 | extern int dlg_default_formitem(DIALOG_FORMITEM * /*items*/); |
689 | extern int dlg_ordinate(const char * /*s*/); |
690 | extern void dlg_free_formitems(DIALOG_FORMITEM * /*items*/); |
691 | |
692 | /* guage.c */ |
693 | extern void * dlg_allocate_gauge(const char * /* title */, const char * /* cprompt */, int /* height */, int /* width */, int /* percent */); |
694 | extern void * dlg_reallocate_gauge(void * /* objptr */, const char * /* title */, const char * /* cprompt */, int /* height */, int /* width */, int /* percent */); |
695 | extern void dlg_free_gauge(void * /* objptr */); |
696 | extern void dlg_update_gauge(void * /* objptr */, int /* percent */); |
697 | |
698 | /* inputstr.c */ |
699 | extern bool dlg_edit_string(char * /*string*/, int * /*offset*/, int /*key*/, int /*fkey*/, bool /*force*/); |
700 | extern const int * dlg_index_columns(const char * /*string*/); |
701 | extern const int * dlg_index_wchars(const char * /*string*/); |
702 | extern int dlg_count_columns(const char * /*string*/); |
703 | extern int dlg_count_wchars(const char * /*string*/); |
704 | extern int dlg_edit_offset(char * /*string*/, int /*offset*/, int /*x_last*/); |
705 | extern int dlg_find_index(const int * /*list*/, int /*limit*/, int /*to_find*/); |
706 | extern int dlg_limit_columns(const char * /*string*/, int /*limit*/, int /*offset*/); |
707 | extern void dlg_finish_string(const char * /* string */); |
708 | extern void dlg_show_string(WINDOW * /*win*/, const char * /*string*/, int /*offset*/, chtype /*attr*/, int /*y_base*/, int /*x_base*/, int /*x_last*/, bool /*hidden*/, bool /*force*/); |
709 | |
710 | /* menubox.c */ |
711 | extern int dlg_dummy_menutext(DIALOG_LISTITEM * /*items*/, int /*current*/, char * /*newtext*/); |
712 | extern int dlg_renamed_menutext(DIALOG_LISTITEM * /*items*/, int /*current*/, char * /*newtext*/); |
713 | |
714 | /* rc.c */ |
715 | #ifdef DLG_HAVE_RC_FILE |
716 | extern int dlg_parse_rc(void); |
717 | extern void dlg_create_rc(const char * /*filename*/); |
718 | #endif |
719 | |
720 | /* treeview.c */ |
721 | extern int dlg_treeview(const char * /*title*/, const char * /*cprompt*/, int /*height*/, int /*width*/, int /*list_height*/, int /*item_no*/, DIALOG_LISTITEM * /*items*/, const char * /*states*/, int * /*depths*/, int /*flag*/, int * /*current_item*/); |
722 | |
723 | /* ui_getc.c */ |
724 | extern int dlg_getc(WINDOW * /*win*/, int * /*fkey*/); |
725 | extern int dlg_getc_callbacks(int /*ch*/, int /*fkey*/, int * /*result*/); |
726 | extern int dlg_last_getc(void); |
727 | extern void dlg_add_last_key(int /*mode*/); |
728 | extern void dlg_add_callback(DIALOG_CALLBACK * /*p*/); |
729 | extern void dlg_add_callback_ref(DIALOG_CALLBACK ** /*p*/, DIALOG_FREEBACK /* cleanup */); |
730 | extern void dlg_flush_getc(void); |
731 | extern void dlg_remove_callback(DIALOG_CALLBACK * /*p*/); |
732 | extern void dlg_killall_bg(int *retval); |
733 | |
734 | /* util.c */ |
735 | extern WINDOW * dlg_new_modal_window(WINDOW * /*parent*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); |
736 | extern WINDOW * dlg_new_window(int /*height*/, int /*width*/, int /*y*/, int /*x*/); |
737 | extern WINDOW * dlg_sub_window(WINDOW * /*win*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); |
738 | extern bool dlg_need_separator(void); |
739 | extern char * dlg_set_result(const char * /*string*/); |
740 | extern char * dlg_strclone(const char * /*cprompt*/); |
741 | extern char * dlg_strempty(void); |
742 | extern chtype dlg_asciibox(chtype /*ch*/); |
743 | extern chtype dlg_boxchar(chtype /*ch*/); |
744 | extern chtype dlg_get_attrs(WINDOW * /*win*/); |
745 | extern const char * dlg_print_line(WINDOW * /*win*/, chtype * /*attr*/, const char * /*prompt*/, int /*lm*/, int /*rm*/, int * /*x*/); |
746 | extern int dlg_box_x_ordinate(int /*width*/); |
747 | extern int dlg_box_y_ordinate(int /*height*/); |
748 | extern int dlg_calc_list_width(int /*item_no*/, DIALOG_LISTITEM * /*items*/); |
749 | extern int dlg_calc_listw(int /*item_no*/, char ** /*items*/, int /*group*/); |
750 | extern int dlg_check_scrolled(int /* key */, int /* last */, int /* page */, bool * /* show */, int * /* offset */); |
751 | extern int dlg_count_real_columns(const char * /*text*/); |
752 | extern int dlg_default_item(char ** /*items*/, int /*llen*/); |
753 | extern int dlg_default_listitem(DIALOG_LISTITEM * /*items*/); |
754 | extern int dlg_defaultno_button(void); |
755 | extern int dlg_default_button(void); |
756 | extern int dlg_max_input(int /*max_len*/); |
757 | extern int dlg_print_scrolled(WINDOW * /* win */, const char * /* prompt */, int /* offset */, int /* height */, int /* width */, int /* pauseopt */); |
758 | extern void dlg_add_help_formitem(int * /* result */, char ** /* tag */, DIALOG_FORMITEM * /* item */); |
759 | extern void dlg_add_help_listitem(int * /* result */, char ** /* tag */, DIALOG_LISTITEM * /* item */); |
760 | extern void dlg_add_quoted(char * /*string*/); |
761 | extern void dlg_add_result(const char * /*string*/); |
762 | extern void dlg_add_separator(void); |
763 | extern void dlg_add_string(char * /*string*/); |
764 | extern void dlg_attr_clear(WINDOW * /*win*/, int /*height*/, int /*width*/, chtype /*attr*/); |
765 | extern void dlg_auto_size(const char * /*title*/, const char * /*prompt*/, int * /*height*/, int * /*width*/, int /*boxlines*/, int /*mincols*/); |
766 | extern void dlg_auto_sizefile(const char * /*title*/, const char * /*file*/, int * /*height*/, int * /*width*/, int /*boxlines*/, int /*mincols*/); |
767 | extern void dlg_beeping(void); |
768 | extern void dlg_calc_listh(int * /*height*/, int * /*list_height*/, int /*item_no*/); |
769 | extern void dlg_clear(void); |
770 | extern void dlg_clr_result(void); |
771 | extern void dlg_ctl_size(int /*height*/, int /*width*/); |
772 | extern void dlg_del_window(WINDOW * /*win*/); |
773 | extern void dlg_does_output(void); |
774 | extern void dlg_draw_bottom_box(WINDOW * /*win*/); |
775 | extern void dlg_draw_bottom_box2(WINDOW * /*win*/, chtype /*on_left*/, chtype /*on_right*/, chtype /*on_inside*/); |
776 | extern void dlg_draw_box(WINDOW * /*win*/, int /*y*/, int /*x*/, int /*height*/, int /*width*/, chtype /*boxchar*/, chtype /*borderchar*/); |
777 | extern void dlg_draw_box2(WINDOW * /*win*/, int /*y*/, int /*x*/, int /*height*/, int /*width*/, chtype /*boxchar*/, chtype /*borderchar*/, chtype /*borderchar2*/); |
778 | extern void dlg_draw_title(WINDOW *win, const char *title); |
779 | extern void dlg_exit(int /*code*/) GCC_NORETURN; |
780 | extern void dlg_item_help(const char * /*txt*/); |
781 | extern void dlg_print_autowrap(WINDOW * /*win*/, const char * /*prompt*/, int /*height*/, int /*width*/); |
782 | extern void dlg_print_listitem(WINDOW * /*win*/, const char * /*text*/, int /*climit*/, bool /*first*/, int /*selected*/); |
783 | extern void dlg_print_size(int /*height*/, int /*width*/); |
784 | extern void dlg_print_text(WINDOW * /*win*/, const char * /*txt*/, int /*len*/, chtype * /*attr*/); |
785 | extern void dlg_put_backtitle(void); |
786 | extern void dlg_restore_vars(DIALOG_VARS * /* save */); |
787 | extern void dlg_save_vars(DIALOG_VARS * /* save */); |
788 | extern void dlg_set_focus(WINDOW * /*parent*/, WINDOW * /*win*/); |
789 | extern void dlg_tab_correct_str(char * /*prompt*/); |
790 | extern void dlg_trim_string(char * /*src*/); |
791 | extern void end_dialog(void); |
792 | extern void init_dialog(FILE * /*input*/, FILE * /*output*/); |
793 | |
794 | extern void dlg_exiterr(const char *, ...) GCC_NORETURN GCC_PRINTFLIKE(1,2); |
795 | |
796 | #ifdef DLG_HAVE_COLOR |
797 | extern chtype dlg_color_pair(int /*foreground*/, int /*background*/); |
798 | extern int dlg_color_count(void); |
799 | extern void dlg_color_setup(void); |
800 | extern void dlg_draw_shadow(WINDOW * /*win*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); |
801 | #endif |
802 | |
803 | #ifdef DLG_HAVE_STRCASECMP |
804 | #define dlg_strcmp(a,b) strcasecmp(a,b) |
805 | #else |
806 | extern int dlg_strcmp(const char * /*a*/, const char * /*b*/); |
807 | #endif |
808 | |
809 | #ifdef DLG_HAVE_DLG_TRACE |
810 | #define DLG_TRACE(params) dlg_trace_msg params |
811 | extern void dlg_trace_msg(const char *fmt, ...) GCC_PRINTFLIKE(1,2); |
812 | extern void dlg_trace_win(WINDOW * /*win*/); |
813 | extern void dlg_trace_chr(int /*ch*/, int /*fkey*/); |
814 | extern void dlg_trace(const char * /*fname*/); |
815 | #else |
816 | #define DLG_TRACE(params) /* nothing */ |
817 | #define dlg_trace_win(win) /* nothing */ |
818 | #define dlg_trace_chr(ch,fkey) /* nothing */ |
819 | #define dlg_trace(fname) /* nothing */ |
820 | #endif |
821 | |
822 | #ifdef KEY_RESIZE |
823 | extern void dlg_move_window(WINDOW * /*win*/, int /*height*/, int /*width*/, int /*y*/, int /*x*/); |
824 | #endif |
825 | |
826 | /* |
827 | * Normally "enter" means "ok". Use this macro to handle the explicit |
828 | * check for DLGK_ENTER: |
829 | */ |
830 | #define dlg_enter_buttoncode(code) (dialog_vars.nook ? DLG_EXIT_OK : dlg_ok_buttoncode(code)) |
831 | |
832 | /* |
833 | * The following stuff is needed for mouse support |
834 | */ |
835 | typedef struct mseRegion { |
836 | int x, y, X, Y, code; |
837 | int mode, step_x, step_y; |
838 | struct mseRegion *next; |
839 | } mseRegion; |
840 | |
841 | #if defined(NCURSES_MOUSE_VERSION) |
842 | |
843 | #define mouse_open() mousemask(BUTTON1_CLICKED, (mmask_t *) 0) |
844 | #define mouse_close() mousemask(0, (mmask_t *) 0) |
845 | |
846 | extern mseRegion * dlg_mouse_mkregion (int /*y*/, int /*x*/, int /*height*/, int /*width*/, int /*code*/); |
847 | extern void dlg_mouse_free_regions (void); |
848 | extern void dlg_mouse_mkbigregion (int /*y*/, int /*x*/, int /*height*/, int /*width*/, int /*code*/, int /*step_x*/, int /*step_y*/, int /*mode*/); |
849 | extern void dlg_mouse_setbase (int /*x*/, int /*y*/); |
850 | extern void dlg_mouse_setcode (int /*code*/); |
851 | |
852 | #define USE_MOUSE 1 |
853 | |
854 | #else |
855 | |
856 | #define mouse_open() /*nothing*/ |
857 | #define mouse_close() /*nothing*/ |
858 | #define dlg_mouse_free_regions() /* nothing */ |
859 | #define dlg_mouse_mkregion(y, x, height, width, code) /*nothing*/ |
860 | #define dlg_mouse_mkbigregion(y, x, height, width, code, step_x, step_y, mode) /*nothing*/ |
861 | #define dlg_mouse_setbase(x, y) /*nothing*/ |
862 | #define dlg_mouse_setcode(c) /*nothing*/ |
863 | |
864 | #define USE_MOUSE 0 |
865 | |
866 | #endif |
867 | |
868 | extern mseRegion *dlg_mouse_region (int /*y*/, int /*x*/); |
869 | extern mseRegion *dlg_mouse_bigregion (int /*y*/, int /*x*/); |
870 | extern int dlg_mouse_wgetch (WINDOW * /*win*/, int * /*fkey*/); |
871 | extern int dlg_mouse_wgetch_nowait (WINDOW * /*win*/, int * /*fkey*/); |
872 | |
873 | #define mouse_mkbutton(y,x,len,code) dlg_mouse_mkregion(y,x,1,len,code); |
874 | |
875 | /* |
876 | * This is the base for fictitious keys, which activate |
877 | * the buttons. |
878 | * |
879 | * Mouse-generated keys are the following: |
880 | * -- the first 32 are used as numbers, in addition to '0'-'9' |
881 | * -- uppercase chars are used to invoke the button (M_EVENT + 'O') |
882 | */ |
883 | #define M_EVENT (DLGK_max + 1) |
884 | |
885 | /* |
886 | * The `flag' parameter in checklist is used to select between |
887 | * radiolist and checklist |
888 | */ |
889 | #define FLAG_CHECK 1 |
890 | #define FLAG_RADIO 0 |
891 | |
892 | /* |
893 | * This is used only for debugging (FIXME: should have a separate header). |
894 | */ |
895 | #ifdef DLG_NO_LEAKS |
896 | extern void _dlg_inputstr_leaks(void); |
897 | #if defined(NCURSES_VERSION) && defined(DLG_HAVE__NC_FREE_AND_EXIT) |
898 | extern void _nc_free_and_exit(int); /* nc_alloc.h normally not installed */ |
899 | #endif |
900 | #endif |
901 | |
902 | #ifdef __cplusplus |
903 | } |
904 | #endif |
905 | /* *INDENT-ON* */ |
906 | |
907 | #endif /* DIALOG_H_included */ |
908 |
Warning: That file was not part of the compilation database. It may have many parsing errors.