File:  [ELWIX - Embedded LightWeight unIX -] / libaitcli / example / keys.h
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Wed Mar 16 17:24:03 2011 UTC (13 years, 2 months ago) by misho
Branches: MAIN
CVS tags: cli4_6, cli4_5, cli4_4, cli4_3, cli4_2, cli4_1, cli4_0, cli3_9, cli3_8, cli3_7, cli3_6, cli3_5, cli3_4, cli3_3, cli3_2, cli3_1, cli3_0, cli2_3, cli2_2, cli2_1, HEAD, CLI4_5, CLI4_4, CLI4_3, CLI4_2, CLI4_1, CLI4_0, CLI3_9, CLI3_8, CLI3_7, CLI3_6, CLI3_5, CLI3_4, CLI3_3, CLI3_2, CLI3_1, CLI3_0, CLI2_3, CLI2_2, CLI2_1, CLI2_0
2.0

#ifndef __AITCLI_H
#define __AITCLI_H


#define	K_F1		"\x1b\x4f\x50"
#define	K_F2		"\x1b\x4f\x51"
#define	K_F3		"\x1b\x4f\x52"
#define	K_F4		"\x1b\x4f\x53"
#define	K_F5		"\x1b\x5b\x31\x35\x7e"
#define	K_F6		"\x1b\x5b\x31\x37\x7e"
#define	K_F7		"\x1b\x5b\x31\x38\x7e"
#define	K_F8		"\x1b\x5b\x31\x39\x7e"
#define	K_F9		"\x1b\x5b\x32\x30\x7e"
#define	K_F10		"\x1b\x5b\x32\x31\x7e"
#define	K_F11		"\x1b\x5b\x32\x33\x7e"
#define	K_F12		"\x1b\x5b\x32\x34\x7e"
#define K_CTRL_F1	"\x1b\x5b\x6b"
#define K_CTRL_F2	"\x1b\x5b\x6c"
#define K_CTRL_F3	"\x1b\x5b\x6d"
#define K_CTRL_F4	"\x1b\x5b\x6e"
#define K_CTRL_F5	"\x1b\x5b\x6f"
#define K_CTRL_F6	"\x1b\x5b\x70"
#define K_CTRL_F7	"\x1b\x5b\x71"
#define K_CTRL_F8	"\x1b\x5b\x72"
#define K_CTRL_F9	"\x1b\x5b\x73"
#define K_CTRL_F10	"\x1b\x5b\x74"
#define K_CTRL_F11	"\x1b\x5b\x75"
#define K_CTRL_F12	"\x1b\x5b\x76"
#define K_CTRL_SH_F1	"\x1b\x5b\x77"
#define K_CTRL_SH_F2	"\x1b\x5b\x78"
#define K_CTRL_SH_F3	"\x1b\x5b\x79"
#define K_CTRL_SH_F4	"\x1b\x5b\x7a"
#define K_CTRL_SH_F5	"\x1b\x5b\x40"
#define K_CTRL_SH_F6	"\x1b\x5b\x5b"
#define K_CTRL_SH_F7	"\x1b\x5b\x5c"
#define K_CTRL_SH_F8	"\x1b\x5b\x5d"
#define K_CTRL_SH_F9	"\x1b\x5b\x5e"
#define K_CTRL_SH_F10	"\x1b\x5b\x5f"
#define K_CTRL_SH_F11	"\x1b\x5b\x60"
#define K_CTRL_SH_F12	"\x1b\x5b\x7b"

#define K_INS		"\x1b\x5b\x32\x7e"
#define K_DEL		"\x1b\x5b\x33\x7e"
#define K_PGUP		"\x1b\x5b\x35\x7e"
#define K_PGDN		"\x1b\x5b\x36\x7e"
#define K_HOME		"\x1b\x5b\x48"
#define K_END		"\x1b\x5b\x46"
#define K_UP		"\x1b\x5b\x41"
#define K_DOWN		"\x1b\x5b\x42"
#define K_RIGHT		"\x1b\x5b\x43"
#define K_LEFT		"\x1b\x5b\x44"

#define K_NULL		"\x0"
#define K_CR		"\xd"
#define K_BTAB		"\x1b\x5b\x5a"
#define K_TAB		"\x9"
#define K_ENTER		"\xa"
#define K_ESC		"\x1b"
#define K_BACKSPACE	"\x7f"
#define K_SPACE		"\x20"

#define K_CTRL_SPACE	K_NULL
#define K_CTRL_2	K_NULL
#define K_CTRL_A	"\x1"
#define K_CTRL_B	"\x2"
#define K_CTRL_C	"\x3"
#define K_CTRL_D	"\x4"
#define K_CTRL_E	"\x5"
#define K_CTRL_F	"\x6"
#define K_CTRL_G	"\x7"
#define K_CTRL_H	"\x8"
#define K_CTRL_I	K_TAB
#define K_CTRL_J	K_ENTER
#define K_CTRL_K	"\xb"
#define K_CTRL_L	"\xc"
#define K_CTRL_M	K_ENTER		// K_CR
#define K_CTRL_N	"\xe"
#define K_CTRL_O	"\xf"
#define K_CTRL_P	"\x10"
#define K_CTRL_Q	"\x11"
#define K_CTRL_R	"\x12"
#define K_CTRL_S	"\x13"
#define K_CTRL_T	"\x14"
#define K_CTRL_U	"\x15"
#define K_CTRL_V	"\x16"
#define K_CTRL_W	"\x17"
#define K_CTRL_X	"\x18"
#define K_CTRL_Y	"\x19"
#define K_CTRL_Z	"\x1a"
#define K_CTRL_LBRACE	"\x1b"
#define K_CTRL_PIPE	"\x1c"
#define K_CTRL_RBRACE	"\x1d"
#define K_CTRL_6	"\x1e"
#define K_CTRL__	"\x1f"


#define K_X_CTRL_INS	"\x1b\x5b\x32\x3b\x35\x7e"
#define K_X_CTRL_DEL	"\x1b\x5b\x33\x3b\x35\x7e"
#define K_X_CTRL_PGUP	"\x1b\x5b\x35\x3b\x35\x7e"
#define K_X_CTRL_PGDN	"\x1b\x5b\x36\x3b\x35\x7e"
#define K_X_CTRL_HOME	"\x1b\x5b\x31\x3b\x35\x48"
#define K_X_CTRL_END	"\x1b\x5b\x31\x3b\x35\x46"
#define K_X_CTRL_UP	"\x1b\x5b\x31\x3b\x35\x41"
#define K_X_CTRL_DOWN	"\x1b\x5b\x31\x3b\x35\x42"
#define K_X_CTRL_RIGHT	"\x1b\x5b\x31\x3b\x35\x43"
#define K_X_CTRL_LEFT	"\x1b\x5b\x31\x3b\x35\x44"

#define K_X_ALT_INS	"\x1b\x5b\x32\x3b\x33\x7e"
#define K_X_ALT_DEL	"\x1b\x5b\x33\x3b\x33\x7e"
#define K_X_ALT_PGUP	"\x1b\x5b\x35\x3b\x33\x7e"
#define K_X_ALT_PGDN	"\x1b\x5b\x36\x3b\x33\x7e"
#define K_X_ALT_HOME	"\x1b\x5b\x31\x3b\x33\x48"
#define K_X_ALT_END	"\x1b\x5b\x31\x3b\x33\x46"
#define K_X_ALT_UP	"\x1b\x5b\x31\x3b\x33\x41"
#define K_X_ALT_DOWN	"\x1b\x5b\x31\x3b\x33\x42"
#define K_X_ALT_RIGHT	"\x1b\x5b\x31\x3b\x33\x43"
#define K_X_ALT_LEFT	"\x1b\x5b\x31\x3b\x33\x44"

#define K_X_CTL_A_INS	"\x1b\x5b\x32\x3b\x37\x7e"
#define K_X_CTL_A_DEL	"\x1b\x5b\x33\x3b\x37\x7e"
#define K_X_CTL_A_PGUP	"\x1b\x5b\x35\x3b\x37\x7e"
#define K_X_CTL_A_PGDN	"\x1b\x5b\x36\x3b\x37\x7e"
#define K_X_CTL_A_HOME	"\x1b\x5b\x31\x3b\x37\x48"
#define K_X_CTL_A_END	"\x1b\x5b\x31\x3b\x37\x46"
#define K_X_CTL_A_UP	"\x1b\x5b\x31\x3b\x37\x41"
#define K_X_CTL_A_DOWN	"\x1b\x5b\x31\x3b\x37\x42"
#define K_X_CTL_A_RIGHT	"\x1b\x5b\x31\x3b\x37\x43"
#define K_X_CTL_A_LEFT	"\x1b\x5b\x31\x3b\x37\x44"


#define STRSIZ		256
#define MAX_BINDKEY	559

#define HISTORY_LINES	100
#define HISTORY_FILE	"/tmp/.CLI.history"

#define CLI_PROMPT	"test> "

#define LINEMODE_RAW	-1
#define LINEMODE_INS	0
#define LINEMODE_OVER	1

#define RETCODE_ERR	-1
#define RETCODE_OK	0
#define RETCODE_EOL	1
#define RETCODE_EOF	2


typedef int (*bindkey_func_t)(int idx, /*linebuffer_t **/ void * __restrict buffer);
typedef struct {
	int		key_len;
	unsigned char	key_ch[8];
	bindkey_func_t	key_func;
} bindkey_t;

struct tagHistory {
	int		hist_len;
	char		hist_line[BUFSIZ];

	TAILQ_ENTRY(tagHistory)	hist_next;
};
typedef TAILQ_HEAD(tqHistoryHead, tagHistory) history_t;

typedef struct {
	char			line_mode;

	char			*line_prompt;

	int			line_bol;
	int			line_eol;
	int			line_len;
	char			*line_buf;

	const struct tagHistory	*line_h;
	history_t		line_history;

	bindkey_t		*line_keys;

	int			line_in;
	int			line_out;
} linebuffer_t;

typedef int (*cmd_func_t)(linebuffer_t * __restrict buffer, int argc, char ** __restrict argv);
typedef struct {
	int		cmd_level;

	int		cmd_min;
	int		cmd_len;
	char		cmd_name[STRSIZ];

	char		cmd_info[STRSIZ];
	char		cmd_help[STRSIZ];

	cmd_func_t	*cmd_func;
} command_t;



#endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>