home · contact · privacy
Maps are always squares, therefore define only their edge lengths.
[plomrogue] / src / client / keybindings.h
1 /* src/client/keybindings.h
2  *
3  * Database of keybindings and functions to read and manipulate it.
4  */
5
6 #ifndef KEYBINDINGS_H
7 #define KEYBINDINGS_H
8
9 #include <stdint.h> /* uint8_t, uint16_t */
10 struct Command;
11
12
13
14 struct KeyBinding
15 {
16   uint16_t keycode;
17   struct Command * command; /* command in command DB to which key is bound */
18 };
19
20 struct KeyBindingDB
21 {
22     struct KeyBinding * kbs;
23     uint8_t n_of_kbs; /* how many KeyBinding structs are stored below .kbs? */
24     uint8_t select; /* linear list index of keybinding selected for editing */
25     uint8_t edit; /* 1 if currently editing a keybinding, else 0 */
26 };
27
28
29
30 /* Return command bound to "keycode" in "kbdb"; NULL if none found. */
31 extern struct Command * get_command_to_keycode(struct KeyBindingDB * kbdb,
32                                                uint16_t keycode);
33
34 /* Return human-readable name (of maximum 9 chars) for "keycode" as matched by
35  * ncurses.h; if none is found, return "(unknown)".
36  */
37 extern char * get_keyname_to_keycode(uint16_t keycode);
38
39 /* Mark keybinding in KeybindingDB (char_selected_kb_db()-) selected by "kb_c"
40  * as being edited, get user input to modify it, then unmark it again. Ensure
41  * there are max. three digits in the ASCII string of the kecode read from user.
42  */
43 extern void mod_selected_keyb(char kb_c);
44
45 /* Move .select in KeybindingDB (char-selected_kb_db()-) selected by "kb_c"
46  * upwards ("dir"=="u") or downwards ("dir"=="d") within KeyBindingDB limits.
47  */
48 extern void move_keyb_selection(char kb_c, char dir);
49
50
51
52 #endif