kconfig/lxdialog/dialog.h
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Feb 17 22:08:06 2008 +0000 (2008-02-17)
changeset 431 8bde4c6ea47a
child 943 1cca90ce0481
permissions -rw-r--r--
Robert P. J. DAY says:

apparently, the patchset for gcc 4.2.1 applies properly to the
source for gcc 4.2.2 and gcc 4.2.3. so, if you want, you can simply
add support for those last two just by augmenting menuconfig and
adding a couple symlinks for those two directories. seems like a
cheap way to add a couple new versions.
     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 #ifdef __sun__
    30 #define CURS_MACROS
    31 #endif
    32 #include CURSES_LOC
    33 
    34 /*
    35  * Colors in ncurses 1.9.9e do not work properly since foreground and
    36  * background colors are OR'd rather than separately masked.  This version
    37  * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible
    38  * with standard curses.  The simplest fix (to make this work with standard
    39  * curses) uses the wbkgdset() function, not used in the original hack.
    40  * Turn it off if we're building with 1.9.9e, since it just confuses things.
    41  */
    42 #if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
    43 #define OLD_NCURSES 1
    44 #undef  wbkgdset
    45 #define wbkgdset(w,p)		/*nothing */
    46 #else
    47 #define OLD_NCURSES 0
    48 #endif
    49 
    50 #define TR(params) _tracef params
    51 
    52 #define KEY_ESC 27
    53 #define TAB 9
    54 #define MAX_LEN 2048
    55 #define BUF_SIZE (10*1024)
    56 #define MIN(x,y) (x < y ? x : y)
    57 #define MAX(x,y) (x > y ? x : y)
    58 
    59 #ifndef ACS_ULCORNER
    60 #define ACS_ULCORNER '+'
    61 #endif
    62 #ifndef ACS_LLCORNER
    63 #define ACS_LLCORNER '+'
    64 #endif
    65 #ifndef ACS_URCORNER
    66 #define ACS_URCORNER '+'
    67 #endif
    68 #ifndef ACS_LRCORNER
    69 #define ACS_LRCORNER '+'
    70 #endif
    71 #ifndef ACS_HLINE
    72 #define ACS_HLINE '-'
    73 #endif
    74 #ifndef ACS_VLINE
    75 #define ACS_VLINE '|'
    76 #endif
    77 #ifndef ACS_LTEE
    78 #define ACS_LTEE '+'
    79 #endif
    80 #ifndef ACS_RTEE
    81 #define ACS_RTEE '+'
    82 #endif
    83 #ifndef ACS_UARROW
    84 #define ACS_UARROW '^'
    85 #endif
    86 #ifndef ACS_DARROW
    87 #define ACS_DARROW 'v'
    88 #endif
    89 
    90 /* error return codes */
    91 #define ERRDISPLAYTOOSMALL (KEY_MAX + 1)
    92 
    93 /*
    94  *   Color definitions
    95  */
    96 struct dialog_color {
    97 	chtype atr;	/* Color attribute */
    98 	int fg;		/* foreground */
    99 	int bg;		/* background */
   100 	int hl;		/* highlight this item */
   101 };
   102 
   103 struct dialog_info {
   104 	const char *backtitle;
   105 	struct dialog_color screen;
   106 	struct dialog_color shadow;
   107 	struct dialog_color dialog;
   108 	struct dialog_color title;
   109 	struct dialog_color border;
   110 	struct dialog_color button_active;
   111 	struct dialog_color button_inactive;
   112 	struct dialog_color button_key_active;
   113 	struct dialog_color button_key_inactive;
   114 	struct dialog_color button_label_active;
   115 	struct dialog_color button_label_inactive;
   116 	struct dialog_color inputbox;
   117 	struct dialog_color inputbox_border;
   118 	struct dialog_color searchbox;
   119 	struct dialog_color searchbox_title;
   120 	struct dialog_color searchbox_border;
   121 	struct dialog_color position_indicator;
   122 	struct dialog_color menubox;
   123 	struct dialog_color menubox_border;
   124 	struct dialog_color item;
   125 	struct dialog_color item_selected;
   126 	struct dialog_color tag;
   127 	struct dialog_color tag_selected;
   128 	struct dialog_color tag_key;
   129 	struct dialog_color tag_key_selected;
   130 	struct dialog_color check;
   131 	struct dialog_color check_selected;
   132 	struct dialog_color uarrow;
   133 	struct dialog_color darrow;
   134 };
   135 
   136 /*
   137  * Global variables
   138  */
   139 extern struct dialog_info dlg;
   140 extern char dialog_input_result[];
   141 
   142 /*
   143  * Function prototypes
   144  */
   145 
   146 /* item list as used by checklist and menubox */
   147 void item_reset(void);
   148 void item_make(const char *fmt, ...);
   149 void item_add_str(const char *fmt, ...);
   150 void item_set_tag(char tag);
   151 void item_set_data(void *p);
   152 void item_set_selected(int val);
   153 int item_activate_selected(void);
   154 void *item_data(void);
   155 char item_tag(void);
   156 
   157 /* item list manipulation for lxdialog use */
   158 #define MAXITEMSTR 200
   159 struct dialog_item {
   160 	char str[MAXITEMSTR];	/* promtp displayed */
   161 	char tag;
   162 	void *data;	/* pointer to menu item - used by menubox+checklist */
   163 	int selected;	/* Set to 1 by dialog_*() function if selected. */
   164 };
   165 
   166 /* list of lialog_items */
   167 struct dialog_list {
   168 	struct dialog_item node;
   169 	struct dialog_list *next;
   170 };
   171 
   172 extern struct dialog_list *item_cur;
   173 extern struct dialog_list item_nil;
   174 extern struct dialog_list *item_head;
   175 
   176 int item_count(void);
   177 void item_set(int n);
   178 int item_n(void);
   179 const char *item_str(void);
   180 int item_is_selected(void);
   181 int item_is_tag(char tag);
   182 #define item_foreach() \
   183 	for (item_cur = item_head ? item_head: item_cur; \
   184 	     item_cur && (item_cur != &item_nil); item_cur = item_cur->next)
   185 
   186 /* generic key handlers */
   187 int on_key_esc(WINDOW *win);
   188 int on_key_resize(void);
   189 
   190 void init_dialog(const char *backtitle);
   191 void reset_dialog(void);
   192 void end_dialog(void);
   193 void attr_clear(WINDOW * win, int height, int width, chtype attr);
   194 void dialog_clear(void);
   195 void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x);
   196 void print_button(WINDOW * win, const char *label, int y, int x, int selected);
   197 void print_title(WINDOW *dialog, const char *title, int width);
   198 void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box,
   199 	      chtype border);
   200 void draw_shadow(WINDOW * win, int y, int x, int height, int width);
   201 
   202 int first_alpha(const char *string, const char *exempt);
   203 int dialog_yesno(const char *title, const char *prompt, int height, int width);
   204 int dialog_msgbox(const char *title, const char *prompt, int height,
   205 		  int width, int pause);
   206 int dialog_textbox(const char *title, const char *file, int height, int width);
   207 int dialog_menu(const char *title, const char *prompt,
   208 		const void *selected, int *s_scroll);
   209 int dialog_checklist(const char *title, const char *prompt, int height,
   210 		     int width, int list_height);
   211 extern char dialog_input_result[];
   212 int dialog_inputbox(const char *title, const char *prompt, int height,
   213 		    int width, const char *init);
   214 
   215 /*
   216  * This is the base for fictitious keys, which activate
   217  * the buttons.
   218  *
   219  * Mouse-generated keys are the following:
   220  *   -- the first 32 are used as numbers, in addition to '0'-'9'
   221  *   -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o')
   222  *   -- uppercase chars are used to invoke the button (M_EVENT + 'O')
   223  */
   224 #define M_EVENT (KEY_MAX+1)