]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/dialog/dlg_keys.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / dialog / dlg_keys.h
1 /*
2  *  $Id: dlg_keys.h,v 1.26 2011/06/21 22:09:22 tom Exp $
3  *
4  *  dlg_keys.h -- runtime binding support for dialog
5  *
6  *  Copyright 2005-2010,2011 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
24 #ifndef DLG_KEYS_H_included
25 #define DLG_KEYS_H_included 1
26
27 #include <dialog.h>
28
29 #ifdef USE_WIDE_CURSES
30 #include <wctype.h>
31 #define dlg_toupper(ch) towupper((wint_t)ch)
32 #define dlg_isupper(ch) iswupper((wint_t)ch)
33 #else
34 #define dlg_toupper(ch) toupper(ch)
35 #define dlg_isupper(ch) (isalpha(ch) && isupper(ch))
36 #endif
37
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41
42 typedef struct {
43     int is_function_key;
44     int curses_key;
45     int dialog_key;
46 } DLG_KEYS_BINDING;
47
48 #define DLG_KEYS_DATA(dialog, curses)  { curses >= KEY_MIN, curses, dialog }
49
50 #define END_KEYS_BINDING { -1, 0, 0 }
51
52 /*
53  * Define dialog's internal function-keys past the range used by curses.
54  */
55 typedef enum {
56     DLGK_MIN = KEY_MAX + 1,
57     /* predefined buttons */
58     DLGK_OK,
59     DLGK_CANCEL,
60     DLGK_EXTRA,
61     DLGK_HELP,
62     DLGK_ESC,
63     /* moving from screen to screen (pages) */
64     DLGK_PAGE_FIRST,
65     DLGK_PAGE_LAST,
66     DLGK_PAGE_NEXT,
67     DLGK_PAGE_PREV,
68     /* moving within a list */
69     DLGK_ITEM_FIRST,
70     DLGK_ITEM_LAST,
71     DLGK_ITEM_NEXT,
72     DLGK_ITEM_PREV,
73     /* moving from field to field (or buttons) */
74     DLGK_FIELD_FIRST,
75     DLGK_FIELD_LAST,
76     DLGK_FIELD_NEXT,
77     DLGK_FIELD_PREV,
78     /* moving within a grid */
79     DLGK_GRID_UP,
80     DLGK_GRID_DOWN,
81     DLGK_GRID_LEFT,
82     DLGK_GRID_RIGHT,
83     /* delete */
84     DLGK_DELETE_LEFT,
85     DLGK_DELETE_RIGHT,
86     DLGK_DELETE_ALL,
87     /* special */
88     DLGK_ENTER,
89     DLGK_BEGIN,
90     DLGK_FINAL,
91     DLGK_SELECT,
92     DLGK_HELPFILE,
93     DLGK_TRACE
94 } DLG_KEYS_ENUM;
95
96 #define is_DLGK_MOUSE(code)     ((code) >= M_EVENT)
97 #define DLGK_MOUSE(code)        ((code) + M_EVENT)
98
99 #define HELPKEY_BINDINGS \
100         DLG_KEYS_DATA( DLGK_HELPFILE,      CHR_HELP ), \
101         DLG_KEYS_DATA( DLGK_HELPFILE,      KEY_F(1) ), \
102         DLG_KEYS_DATA( DLGK_HELPFILE,      KEY_HELP )
103
104 #define ENTERKEY_BINDINGS \
105         DLG_KEYS_DATA( DLGK_ENTER,         '\n' ), \
106         DLG_KEYS_DATA( DLGK_ENTER,         '\r' ), \
107         DLG_KEYS_DATA( DLGK_ENTER,         KEY_ENTER )
108
109 /* ^U == 21 */
110 #define INPUTSTR_BINDINGS \
111         DLG_KEYS_DATA( DLGK_BEGIN,         KEY_HOME ), \
112         DLG_KEYS_DATA( DLGK_DELETE_ALL,    CHR_KILL ), \
113         DLG_KEYS_DATA( DLGK_DELETE_LEFT,   CHR_BACKSPACE ), \
114         DLG_KEYS_DATA( DLGK_DELETE_LEFT,   KEY_BACKSPACE ), \
115         DLG_KEYS_DATA( DLGK_DELETE_RIGHT,  CHR_DELETE ), \
116         DLG_KEYS_DATA( DLGK_DELETE_RIGHT,  KEY_DC ), \
117         DLG_KEYS_DATA( DLGK_FINAL,         KEY_END ), \
118         DLG_KEYS_DATA( DLGK_GRID_LEFT,     KEY_LEFT ), \
119         DLG_KEYS_DATA( DLGK_GRID_RIGHT,    KEY_RIGHT )
120
121 #define SCROLLKEY_BINDINGS \
122         DLG_KEYS_DATA( DLGK_GRID_DOWN,  'J' ), \
123         DLG_KEYS_DATA( DLGK_GRID_DOWN,  'j' ), \
124         DLG_KEYS_DATA( DLGK_GRID_DOWN,  KEY_DOWN ), \
125         DLG_KEYS_DATA( DLGK_GRID_UP,    'K' ), \
126         DLG_KEYS_DATA( DLGK_GRID_UP,    'k' ), \
127         DLG_KEYS_DATA( DLGK_GRID_UP,    KEY_UP ), \
128         DLG_KEYS_DATA( DLGK_PAGE_FIRST, 'g' ), \
129         DLG_KEYS_DATA( DLGK_PAGE_FIRST, KEY_HOME ), \
130         DLG_KEYS_DATA( DLGK_PAGE_LAST,  'G' ), \
131         DLG_KEYS_DATA( DLGK_PAGE_LAST,  KEY_END ), \
132         DLG_KEYS_DATA( DLGK_PAGE_NEXT,  'F' ), \
133         DLG_KEYS_DATA( DLGK_PAGE_NEXT,  'f' ), \
134         DLG_KEYS_DATA( DLGK_PAGE_NEXT,  KEY_NPAGE ), \
135         DLG_KEYS_DATA( DLGK_PAGE_PREV,  'B' ), \
136         DLG_KEYS_DATA( DLGK_PAGE_PREV,  'b' ), \
137         DLG_KEYS_DATA( DLGK_PAGE_PREV,  KEY_PPAGE )
138
139 extern int dlg_lookup_key(WINDOW * /*win*/, int /*curses_key*/, int * /*dialog_key*/);
140 extern int dlg_result_key(int /*dialog_key*/, int /*fkey*/, int * /*resultp*/);
141 extern void dlg_register_buttons(WINDOW * /*win*/, const char * /*name*/, const char ** /*buttons*/);
142 extern void dlg_register_window(WINDOW * /*win*/, const char * /*name*/, DLG_KEYS_BINDING * /*binding*/);
143 extern void dlg_unregister_window(WINDOW * /*win*/);
144
145 #ifdef HAVE_RC_FILE
146 extern int dlg_parse_bindkey(char * /*params*/);
147 extern void dlg_dump_keys(FILE * /*fp*/);
148 #endif
149
150 #ifdef __cplusplus
151 }
152 #endif
153
154 #endif /* DLG_KEYS_H_included */