Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/dialog/dlg_keys.h
39475 views
1
/*
2
* $Id: dlg_keys.h,v 1.39 2020/11/22 23:19:24 tom Exp $
3
*
4
* dlg_keys.h -- runtime binding support for dialog
5
*
6
* Copyright 2005-2019,2020 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
/* *INDENT-OFF* */
27
28
#include <dialog.h>
29
30
#ifdef USE_WIDE_CURSES
31
#include <wctype.h>
32
#define dlg_toupper(ch) towupper((wint_t)ch)
33
#define dlg_isupper(ch) iswupper((wint_t)ch)
34
#else
35
#define dlg_toupper(ch) (((ch) > 0 && (ch) <= 255) ? toupper(ch) : (ch))
36
#define dlg_isupper(ch) (isalpha(ch) && isupper(ch))
37
#endif
38
39
#ifdef __cplusplus
40
extern "C" {
41
#endif
42
43
typedef struct {
44
int is_function_key;
45
int curses_key;
46
int dialog_key;
47
} DLG_KEYS_BINDING;
48
49
#define DLG_KEYS_DATA(dialog, curses) { (curses) >= KEY_MIN, curses, dialog }
50
51
#define END_KEYS_BINDING { -1, 0, 0 }
52
53
/*
54
* Define dialog's internal function-keys past the range used by curses.
55
*/
56
typedef enum {
57
DLGK_MIN = KEY_MAX + 1,
58
/* predefined buttons */
59
DLGK_OK,
60
DLGK_CANCEL,
61
DLGK_EXTRA,
62
DLGK_HELP,
63
DLGK_ESC,
64
/* moving from screen to screen (pages) */
65
DLGK_PAGE_FIRST,
66
DLGK_PAGE_LAST,
67
DLGK_PAGE_NEXT,
68
DLGK_PAGE_PREV,
69
/* moving within a list */
70
DLGK_ITEM_FIRST,
71
DLGK_ITEM_LAST,
72
DLGK_ITEM_NEXT,
73
DLGK_ITEM_PREV,
74
/* moving from field to field (or buttons) */
75
DLGK_FIELD_FIRST,
76
DLGK_FIELD_LAST,
77
DLGK_FIELD_NEXT,
78
DLGK_FIELD_PREV,
79
/* moving from form-field to form-field (or buttons) */
80
DLGK_FORM_FIRST,
81
DLGK_FORM_LAST,
82
DLGK_FORM_NEXT,
83
DLGK_FORM_PREV,
84
/* moving within a grid */
85
DLGK_GRID_UP,
86
DLGK_GRID_DOWN,
87
DLGK_GRID_LEFT,
88
DLGK_GRID_RIGHT,
89
/* delete */
90
DLGK_DELETE_LEFT,
91
DLGK_DELETE_RIGHT,
92
DLGK_DELETE_ALL,
93
/* special */
94
DLGK_ENTER,
95
DLGK_BEGIN,
96
DLGK_FINAL,
97
DLGK_SELECT,
98
DLGK_HELPFILE,
99
DLGK_TRACE,
100
DLGK_TOGGLE,
101
DLGK_LEAVE
102
} DLG_KEYS_ENUM;
103
104
#define is_DLGK_MOUSE(code) ((code) >= M_EVENT)
105
#define DLGK_MOUSE(code) ((code) + M_EVENT)
106
107
#define HELPKEY_BINDINGS \
108
DLG_KEYS_DATA( DLGK_HELPFILE, CHR_HELP ), \
109
DLG_KEYS_DATA( DLGK_HELPFILE, KEY_F(1) ), \
110
DLG_KEYS_DATA( DLGK_HELPFILE, KEY_HELP )
111
112
#define ENTERKEY_BINDINGS \
113
DLG_KEYS_DATA( DLGK_ENTER, '\n' ), \
114
DLG_KEYS_DATA( DLGK_ENTER, '\r' ), \
115
DLG_KEYS_DATA( DLGK_ENTER, KEY_ENTER ), \
116
DLG_KEYS_DATA( DLGK_LEAVE, CHR_LEAVE )
117
118
/* ^U == 21 */
119
#define INPUTSTR_BINDINGS \
120
DLG_KEYS_DATA( DLGK_BEGIN, KEY_HOME ), \
121
DLG_KEYS_DATA( DLGK_DELETE_ALL, CHR_KILL ), \
122
DLG_KEYS_DATA( DLGK_DELETE_LEFT, CHR_BACKSPACE ), \
123
DLG_KEYS_DATA( DLGK_DELETE_LEFT, KEY_BACKSPACE ), \
124
DLG_KEYS_DATA( DLGK_DELETE_RIGHT, CHR_DELETE ), \
125
DLG_KEYS_DATA( DLGK_DELETE_RIGHT, KEY_DC ), \
126
DLG_KEYS_DATA( DLGK_FINAL, KEY_END ), \
127
DLG_KEYS_DATA( DLGK_GRID_LEFT, KEY_LEFT ), \
128
DLG_KEYS_DATA( DLGK_GRID_RIGHT, KEY_RIGHT )
129
130
#define SCROLL_FKEY_BINDINGS \
131
DLG_KEYS_DATA( DLGK_GRID_DOWN, KEY_DOWN ), \
132
DLG_KEYS_DATA( DLGK_GRID_UP, KEY_UP ), \
133
DLG_KEYS_DATA( DLGK_PAGE_FIRST, KEY_HOME ), \
134
DLG_KEYS_DATA( DLGK_PAGE_LAST, KEY_END ), \
135
DLG_KEYS_DATA( DLGK_PAGE_NEXT, KEY_NPAGE ), \
136
DLG_KEYS_DATA( DLGK_PAGE_PREV, KEY_PPAGE )
137
138
#define SCROLLKEY_BINDINGS \
139
SCROLL_FKEY_BINDINGS, \
140
DLG_KEYS_DATA( DLGK_GRID_DOWN, 'J' ), \
141
DLG_KEYS_DATA( DLGK_GRID_DOWN, 'j' ), \
142
DLG_KEYS_DATA( DLGK_GRID_UP, 'K' ), \
143
DLG_KEYS_DATA( DLGK_GRID_UP, 'k' ), \
144
DLG_KEYS_DATA( DLGK_PAGE_FIRST, 'g' ), \
145
DLG_KEYS_DATA( DLGK_PAGE_LAST, 'G' ), \
146
DLG_KEYS_DATA( DLGK_PAGE_NEXT, 'F' ), \
147
DLG_KEYS_DATA( DLGK_PAGE_NEXT, 'f' ), \
148
DLG_KEYS_DATA( DLGK_PAGE_PREV, 'B' ), \
149
DLG_KEYS_DATA( DLGK_PAGE_PREV, 'b' )
150
151
#define TRAVERSE_BINDINGS \
152
DLG_KEYS_DATA( DLGK_ENTER, CHR_SPACE ), \
153
DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_DOWN ), \
154
DLG_KEYS_DATA( DLGK_FIELD_NEXT, KEY_RIGHT ), \
155
DLG_KEYS_DATA( DLGK_FIELD_NEXT, TAB ), \
156
DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_UP ), \
157
DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_BTAB ), \
158
DLG_KEYS_DATA( DLGK_FIELD_PREV, KEY_LEFT )
159
160
#define TOGGLEKEY_BINDINGS \
161
DLG_KEYS_DATA( DLGK_TOGGLE, CHR_SPACE )
162
163
extern int dlg_button_key(int /*exit_code*/, int * /*button*/, int * /*dialog_key*/, int * /*fkey*/);
164
extern int dlg_lookup_key(WINDOW * /*win*/, int /*curses_key*/, int * /*dialog_key*/);
165
extern int dlg_ok_button_key(int /*exit_code*/, int * /*button*/, int * /*dialog_key*/, int * /*fkey*/);
166
extern int dlg_result_key(int /*dialog_key*/, int /*fkey*/, int * /*resultp*/);
167
extern void dlg_register_buttons(WINDOW * /*win*/, const char * /*name*/, const char ** /*buttons*/);
168
extern void dlg_register_window(WINDOW * /*win*/, const char * /*name*/, DLG_KEYS_BINDING * /*binding*/);
169
extern void dlg_unregister_window(WINDOW * /*win*/);
170
171
#ifdef HAVE_RC_FILE
172
extern int dlg_parse_bindkey(char * /*params*/);
173
extern void dlg_dump_keys(FILE * /*fp*/);
174
extern void dlg_dump_window_keys(FILE * /*fp*/, WINDOW * /*win*/);
175
#endif
176
177
#ifdef __cplusplus
178
}
179
#endif
180
/* *INDENT-ON* */
181
182
#endif /* DLG_KEYS_H_included */
183
184