|
|
1.1 ! root 1: /* ! 2: * dialog.h -- common declarations for all dialog modules ! 3: * ! 4: * AUTHOR: Savio Lam ([email protected]) ! 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)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.