X-Git-Url: https://pd.if.org/git/?p=pd_readline;a=blobdiff_plain;f=mg%2Fkbd.h;fp=mg%2Fkbd.h;h=67b244c65f47815e29518955eadc9a130ad20902;hp=0000000000000000000000000000000000000000;hb=a9843085ec916c175bd245a8398f30e6cc03f984;hpb=26fe4e09c6c3c250334fdeed60ce3061febecde2 diff --git a/mg/kbd.h b/mg/kbd.h new file mode 100644 index 0000000..67b244c --- /dev/null +++ b/mg/kbd.h @@ -0,0 +1,58 @@ +/* $OpenBSD: kbd.h,v 1.18 2006/07/27 19:59:29 deraadt Exp $ */ + +/* This file is in the public domain. */ + +/* + * kbd.h: type definitions for symbol.c and kbd.c for mg experimental + */ + +struct map_element { + KCHAR k_base; /* first key in element */ + KCHAR k_num; /* last key in element */ + PF *k_funcp; /* pointer to array of pointers */ + /* to functions */ + struct keymap_s *k_prefmap; /* keymap of ONLY prefix key in */ + /* element */ +}; + +/* + * Predefined keymaps are NOT type KEYMAP because final array needs + * dimension. If any changes are made to this struct, they must be reflected + * in all keymap declarations. + */ + +#define KEYMAPE(NUM) { \ + short map_num; /* elements used */ \ + short map_max; /* elements allocated */\ + PF map_default; /* default function */ \ + struct map_element map_element[NUM]; /* really [e_max] */ \ +} +typedef struct keymap_s KEYMAPE(1) KEYMAP; + +/* Number of map_elements to grow an overflowed keymap by */ +#define IMAPEXT 0 +#define MAPGROW 3 +#define MAPINIT (MAPGROW+1) + +/* Max number of default bindings added to avoid creating new element */ +#define MAPELEDEF 4 + +struct maps_s { + KEYMAP *p_map; + const char *p_name; + struct maps_s *p_next; +}; + +extern struct maps_s *maps; +extern struct maps_s fundamental_mode; +#define fundamental_map (fundamental_mode.p_map) + +int dobindkey(KEYMAP *, const char *, const char *); +KEYMAP *name_map(const char *); +struct maps_s *name_mode(const char *); +PF doscan(KEYMAP *, int, KEYMAP **); +void maps_init(void); +int maps_add(KEYMAP *, const char *); + +extern struct map_element *ele; +extern struct maps_s *defb_modes[];