xref: /openbsd/usr.bin/mg/kbd.h (revision db3296cf)
1 /*	$OpenBSD: kbd.h,v 1.14 2002/03/11 13:02:56 vincent Exp $	*/
2 
3 /*
4  * kbd.h: type definitions for symbol.c and kbd.c for mg experimental
5  */
6 
7 typedef struct {
8 	KCHAR	k_base;	/* first key in element		 */
9 	KCHAR	k_num;		/* last key in element		 */
10 	PF	*k_funcp;	/* pointer to array of pointers
11 					 * to functions */
12 	struct keymap_s *k_prefmap;	/* keymap of ONLY prefix key in
13 					 * element */
14 } MAP_ELEMENT;
15 
16 /*
17  * predefined keymaps are NOT type KEYMAP because final array needs
18  * dimension.  If any changes are made to this struct, they must be reflected
19  * in all keymap declarations.
20  */
21 
22 #define KEYMAPE(NUM)	{						\
23 	short	map_num;		/* elements used */		\
24 	short	map_max;		/* elements allocated */	\
25 	PF	map_default;		/* default function */		\
26 	MAP_ELEMENT map_element[NUM];	/* really [e_max] */		\
27 }
28 typedef struct keymap_s KEYMAPE(1) KEYMAP;
29 
30 /* Number of map_elements to grow an overflowed keymap by */
31 #define IMAPEXT 0
32 #define MAPGROW 3
33 #define MAPINIT (MAPGROW+1)
34 
35 /* Max number of default bindings added to avoid creating new element */
36 #define MAPELEDEF 4
37 
38 typedef struct MAPS_S {
39 	KEYMAP	*p_map;
40 	const char *p_name;
41 	struct MAPS_S *p_next;
42 } MAPS;
43 
44 extern MAPS	*maps;
45 extern MAPS	fundamental_mode;
46 #define		fundamental_map (fundamental_mode.p_map)
47 
48 int	 dobindkey(KEYMAP *, const char *, const char *);
49 KEYMAP	*name_map(const char *);
50 MAPS	*name_mode(const char *);
51 PF	 doscan(KEYMAP *, int, KEYMAP **);
52 const	 char *map_name(KEYMAP *);
53 void	 maps_init(void);
54 int	 maps_add(KEYMAP *, const char *);
55 
56 extern MAP_ELEMENT	*ele;
57 extern MAPS		*defb_modes[];
58