#ifndef LYKEYMAP_H
#define LYKEYMAP_H
#ifndef HTUTILS_H
#include <HTUtils.h>
#endif
extern BOOLEAN LYisNonAlnumKeyname PARAMS((int ch, int key_name));
extern char *key_for_func PARAMS((int func));
extern int LYReverseKeymap PARAMS((int key_name));
extern int lookup_keymap PARAMS((int code));
extern int lacname_to_lac PARAMS((CONST char *func));
extern int lkcstring_to_lkc PARAMS((CONST char *src));
extern int remap PARAMS((char *key, char *func));
extern void print_keymap PARAMS((char **newfile));
extern void reset_emacs_keys NOPARAMS;
extern void reset_numbers_as_arrows NOPARAMS;
extern void reset_vi_keys NOPARAMS;
extern void set_emacs_keys NOPARAMS;
extern void set_numbers_as_arrows NOPARAMS;
extern void set_vi_keys NOPARAMS;
extern void set_vms_keys NOPARAMS;
/* We only use unsigned keycodes; if there's a problem matching with enum
* (which is supposed to be 'int'), that would be okay, but not as clean
* for type-checking.
*/
typedef unsigned short LYKeymap_t;
#define KEYMAP_SIZE 661
extern LYKeymap_t keymap[KEYMAP_SIZE]; /* main keymap matrix */
#ifdef EXP_KEYBOARD_LAYOUT
extern int current_layout;
extern unsigned short * LYKbLayouts[];
extern char * LYKbLayoutNames[];
extern int LYSetKbLayout PARAMS((char *layout_id));
#endif
#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
extern LYKeymap_t key_override[];
#endif
/* * * LynxKeyCodes * * */
#define LKC_MOD1 0x4000 /* a modifier bit - currently for ^x-map */
#define LKC_MOD2 0x2000 /* another one - currently for esc-map */
#define LKC_MOD3 0x1000 /* another one - currently for double-map */
#define LKC_ISLAC 0x0800 /* flag: lynxkeycode already lynxactioncode */
#define LKC_ISLKC 0x0400 /* flag: already lynxkeycode (not native) */
/* 0x0400 is MOUSE_KEYSYM for slang in LYStrings.c */
#define LKC_MASK 0x07FF /* mask for lynxkeycode proper */
#define LKC_DONE 0x07FE /* special value - operation done, not-a-key */
/* * * LynxActionCodes * * */
#define LAC_MASK 0x00FF /* mask for lynxactioncode - must cover all
assigned LYK_* values */
/* Convert lynxkeycode to lynxactioncode. Modifiers are dropped. */
#define LKC_TO_LAC(ktab,c) (((c)==-1) ? ktab[0] : \
((c)&LKC_ISLAC) ? ((c)&LAC_MASK) : \
ktab[((c)&LKC_MASK)+1])
/* Mask lynxactioncode as a lynxkeycode. */
#define LAC_TO_LKC0(a) ((a)|LKC_ISLAC)
/* Convert lynxactioncode to a lynxkeycode, attempting reverse mapping. */
#define LAC_TO_LKC(a) ((LYReverseKeymap(a)>=0)?LYReverseKeymap(a):LAC_TO_LKC0(a))
/* Simplify a lynxkeycode:
attempt reverse mapping if a masked lynxactioncode, drop modifiers. */
#define LKC_TO_C(c) ((c&LKC_ISLAC)? LAC_TO_LKC(c&LAC_MASK) : (c&LKC_MASK))
#define LKC_HAS_ESC_MOD(c) (c >= 0 && (c&LKC_MOD2))
/* * The defined LynxActionCodes * */
/* Variables for holding and passing around lynxactioncodes are
* generally of type int, the types LYKeymap_t and LYKeymapCodes
* are currently only used for the definitions. That could change. - kw
*/
/* The order of this enum must match the 'revmap[]' array in LYKeymap.c */
typedef enum {
LYK_UNKNOWN=0
, LYK_1
, LYK_2
, LYK_3
, LYK_4
, LYK_5
, LYK_6
, LYK_7
, LYK_8
, LYK_9
, LYK_SOURCE
, LYK_RELOAD
, LYK_PIPE
, LYK_QUIT
, LYK_ABORT
, LYK_NEXT_PAGE
, LYK_PREV_PAGE
, LYK_UP_TWO
, LYK_DOWN_TWO
, LYK_UP_HALF
, LYK_DOWN_HALF
, LYK_REFRESH
, LYK_HOME
, LYK_END
, LYK_PREV_LINK
, LYK_NEXT_LINK
, LYK_LPOS_PREV_LINK
, LYK_LPOS_NEXT_LINK
, LYK_FASTBACKW_LINK
, LYK_FASTFORW_LINK
, LYK_UP_LINK
, LYK_DOWN_LINK
, LYK_RIGHT_LINK
, LYK_LEFT_LINK
, LYK_HISTORY
, LYK_PREV_DOC
, LYK_ACTIVATE
, LYK_SUBMIT /* mostly like LYK_ACTIVATE, for mouse use, don't map */
, LYK_GOTO
, LYK_ECGOTO
, LYK_HELP
, LYK_DWIMHELP
, LYK_INDEX
, LYK_NOCACHE
, LYK_INTERRUPT
, LYK_MAIN_MENU
, LYK_OPTIONS
, LYK_INDEX_SEARCH
, LYK_WHEREIS
, LYK_NEXT
, LYK_COMMENT
, LYK_EDIT
, LYK_INFO
, LYK_PRINT
, LYK_ADD_BOOKMARK
, LYK_DEL_BOOKMARK
, LYK_VIEW_BOOKMARK
, LYK_VLINKS
, LYK_SHELL
, LYK_DOWNLOAD
, LYK_TRACE_TOGGLE
, LYK_TRACE_LOG
, LYK_IMAGE_TOGGLE
, LYK_INLINE_TOGGLE
, LYK_HEAD
, LYK_DO_NOTHING
, LYK_TOGGLE_HELP
, LYK_JUMP
, LYK_KEYMAP
, LYK_LIST
, LYK_TOOLBAR
, LYK_HISTORICAL
, LYK_MINIMAL
, LYK_SOFT_DQUOTES
, LYK_RAW_TOGGLE
, LYK_COOKIE_JAR
, LYK_F_LINK_NUM
, LYK_CLEAR_AUTH
, LYK_SWITCH_DTD
, LYK_ELGOTO
, LYK_CHANGE_LINK
, LYK_DWIMEDIT
, LYK_EDIT_TEXTAREA
, LYK_GROW_TEXTAREA
, LYK_INSERT_FILE
#ifdef EXP_ADDRLIST_PAGE
, LYK_ADDRLIST
#else
#define LYK_ADDRLIST LYK_ADD_BOOKMARK
#endif
#ifdef USE_EXTERNALS
, LYK_EXTERN
#endif /* !defined(USE_EXTERNALS) */
#if defined(VMS) || defined(DIRED_SUPPORT)
, LYK_DIRED_MENU
#else
#define LYK_DIRED_MENU LYK_UNKNOWN
#endif /* VMS || DIRED_SUPPORT */
#ifdef DIRED_SUPPORT
, LYK_CREATE
, LYK_REMOVE
, LYK_MODIFY
, LYK_TAG_LINK
, LYK_UPLOAD
, LYK_INSTALL
#else
#define LYK_TAG_LINK LYK_UNKNOWN
#endif /* DIRED_SUPPORT */
} LYKeymapCodes;
#endif /* LYKEYMAP_H */