kconfig/lxdialog/dialog.h
author Arnaud Lacombe <lacombar@gmail.com>
Tue Aug 03 06:17:51 2010 +0200 (2010-08-03)
changeset 2064 f5ebe8c429dc
parent 1 eeea35fbf182
permissions -rw-r--r--
libc/uClibc: add uClibc 0.9.30.3

This version has been released a couple of month ago, but it never reached
crosstool-ng tree. This may be linked to the fact that the current 0.9.30.2,
once patched, has nothing much different from 0.9.30.3, released.

I'm not including any patch with this upgrade, on purpose.

Signed-off-by: Arnaud Lacombe <lacombar@gmail.com>
     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)