diff --git a/project/common.mk b/project/common.mk index af302a1..f3f009d 100644 --- a/project/common.mk +++ b/project/common.mk @@ -6,6 +6,7 @@ COMMON_SRCS = \ src/console/ptyc_console_ctrl.c \ src/console/ptyc_console_poller.c \ src/console/ptyc_console_reader.c \ + src/console/ptyc_console_vkcode.c \ src/console/ptyc_console_writer.c \ src/daemon/ptyc_daemon_connect.c \ src/daemon/ptyc_daemon_init.c \ diff --git a/src/console/ptyc_console_vkcode.c b/src/console/ptyc_console_vkcode.c new file mode 100644 index 0000000..e9606fa --- /dev/null +++ b/src/console/ptyc_console_vkcode.c @@ -0,0 +1,157 @@ +/*********************************************************/ +/* ptycon: a pty-console bridge */ +/* Copyright (C) 2016 Z. Gilboa */ +/* Released under GPLv2 and GPLv3; see COPYING.PTYCON. */ +/*********************************************************/ + +#include +#include +#include + +#include +#include "ptycon_bridge_impl.h" + +#define P0() {(const unsigned char[]){0},0} +#define P1(a) {(const unsigned char[]){a,0},1} +#define P2(a,b) {(const unsigned char[]){a,b,0},2} +#define P3(a,b,c) {(const unsigned char[]){a,b,c,0},3} +#define P4(a,b,c,d) {(const unsigned char[]){a,b,c,d,0},4} +#define P5(a,b,c,d,e) {(const unsigned char[]){a,b,c,d,e,0},5} +#define P6(a,b,c,d,e,f) {(const unsigned char[]){a,b,c,d,e,f,0},6} + +const struct ptyc_vkcode ptyc_vkcode[0x100] = { + [VK_LBUTTON] = P0(), + [VK_RBUTTON] = P0(), + [VK_CANCEL] = P0(), + [VK_MBUTTON] = P0(), + [VK_XBUTTON1] = P0(), + [VK_XBUTTON2] = P0(), + [VK_BACK] = P0(), + [VK_TAB] = P0(), + [VK_CLEAR] = P0(), + [VK_RETURN] = P0(), + [VK_SHIFT] = P0(), + [VK_CONTROL] = P0(), + [VK_MENU] = P0(), + [VK_PAUSE] = P0(), + [VK_CAPITAL] = P0(), + [VK_HANGUL] = P0(), + [VK_JUNJA] = P0(), + [VK_FINAL] = P0(), + [VK_KANJI] = P0(), + [VK_ESCAPE] = P0(), + [VK_CONVERT] = P0(), + [VK_NONCONVERT] = P0(), + [VK_ACCEPT] = P0(), + [VK_MODECHANGE] = P0(), + [VK_SPACE] = P0(), + [VK_PRIOR] = P0(), + [VK_NEXT] = P0(), + [VK_END] = P0(), + [VK_HOME] = P0(), + [VK_LEFT] = P3(0x1b,0x5b,0x44), + [VK_UP] = P3(0x1b,0x5b,0x41), + [VK_RIGHT] = P3(0x1b,0x5b,0x43), + [VK_DOWN] = P3(0x1b,0x5b,0x42), + [VK_SELECT] = P0(), + [VK_PRINT] = P0(), + [VK_EXECUTE] = P0(), + [VK_SNAPSHOT] = P0(), + [VK_INSERT] = P0(), + [VK_DELETE] = P0(), + [VK_HELP] = P0(), + [VK_LWIN] = P0(), + [VK_RWIN] = P0(), + [VK_APPS] = P0(), + [VK_SLEEP] = P0(), + [VK_NUMPAD0] = P0(), + [VK_NUMPAD1] = P0(), + [VK_NUMPAD2] = P0(), + [VK_NUMPAD3] = P0(), + [VK_NUMPAD4] = P0(), + [VK_NUMPAD5] = P0(), + [VK_NUMPAD6] = P0(), + [VK_NUMPAD7] = P0(), + [VK_NUMPAD8] = P0(), + [VK_NUMPAD9] = P0(), + [VK_MULTIPLY] = P0(), + [VK_ADD] = P0(), + [VK_SEPARATOR] = P0(), + [VK_SUBTRACT] = P0(), + [VK_DECIMAL] = P0(), + [VK_DIVIDE] = P0(), + [VK_F1] = P3(0x1b,0x4f,0x50), + [VK_F2] = P3(0x1b,0x4f,0x51), + [VK_F3] = P3(0x1b,0x4f,0x52), + [VK_F4] = P3(0x1b,0x4f,0x53), + [VK_F5] = P5(0x1b,0x5b,0x31,0x35,0x7e), + [VK_F6] = P5(0x1b,0x5b,0x31,0x37,0x7e), + [VK_F7] = P5(0x1b,0x5b,0x31,0x38,0x7e), + [VK_F8] = P5(0x1b,0x5b,0x31,0x39,0x7e), + [VK_F9] = P5(0x1b,0x5b,0x32,0x30,0x7e), + [VK_F10] = P5(0x1b,0x5b,0x32,0x31,0x7e), + [VK_F11] = P5(0x1b,0x5b,0x32,0x33,0x7e), + [VK_F12] = P5(0x1b,0x5b,0x32,0x34,0x7e), + [VK_F13] = P0(), + [VK_F14] = P0(), + [VK_F15] = P0(), + [VK_F16] = P0(), + [VK_F17] = P0(), + [VK_F18] = P0(), + [VK_F19] = P0(), + [VK_F20] = P0(), + [VK_F21] = P0(), + [VK_F22] = P0(), + [VK_F23] = P0(), + [VK_F24] = P0(), + [VK_NUMLOCK] = P0(), + [VK_SCROLL] = P0(), + [VK_LSHIFT] = P0(), + [VK_RSHIFT] = P0(), + [VK_LCONTROL] = P0(), + [VK_RCONTROL] = P0(), + [VK_LMENU] = P0(), + [VK_RMENU] = P0(), + [VK_BROWSER_BACK] = P0(), + [VK_BROWSER_FORWARD] = P0(), + [VK_BROWSER_REFRESH] = P0(), + [VK_BROWSER_STOP] = P0(), + [VK_BROWSER_SEARCH] = P0(), + [VK_BROWSER_FAVORITES] = P0(), + [VK_BROWSER_HOME] = P0(), + [VK_VOLUME_MUTE] = P0(), + [VK_VOLUME_DOWN] = P0(), + [VK_VOLUME_UP] = P0(), + [VK_MEDIA_NEXT_TRACK] = P0(), + [VK_MEDIA_PREV_TRACK] = P0(), + [VK_MEDIA_STOP] = P0(), + [VK_MEDIA_PLAY_PAUSE] = P0(), + [VK_LAUNCH_MAIL] = P0(), + [VK_LAUNCH_MEDIA_SELECT] =P0(), + [VK_LAUNCH_APP1] = P0(), + [VK_LAUNCH_APP2] = P0(), + [VK_OEM_1] = P0(), + [VK_OEM_PLUS] = P0(), + [VK_OEM_COMMA] = P0(), + [VK_OEM_MINUS] = P0(), + [VK_OEM_PERIOD] = P0(), + [VK_OEM_2] = P0(), + [VK_OEM_3] = P0(), + [VK_OEM_4] = P0(), + [VK_OEM_5] = P0(), + [VK_OEM_6] = P0(), + [VK_OEM_7] = P0(), + [VK_OEM_8] = P0(), + [VK_OEM_102] = P0(), + [VK_PROCESSKEY] = P0(), + [VK_PACKET] = P0(), + [VK_ATTN] = P0(), + [VK_CRSEL] = P0(), + [VK_EXSEL] = P0(), + [VK_EREOF] = P0(), + [VK_PLAY] = P0(), + [VK_ZOOM] = P0(), + [VK_NONAME] = P0(), + [VK_PA1] = P0(), + [VK_OEM_CLEAR] = P0(), +}; diff --git a/src/internal/ptycon_bridge_impl.h b/src/internal/ptycon_bridge_impl.h index 0432cde..51ce93e 100644 --- a/src/internal/ptycon_bridge_impl.h +++ b/src/internal/ptycon_bridge_impl.h @@ -31,6 +31,11 @@ struct ptyc_term_input { unsigned char stream [PTYC_RAW_EVENTS*4]; }; +struct ptyc_vkcode { + const unsigned char const * mbstr; + uint16_t mblen; +}; + struct ptyc_term_ctx; typedef void * __fastcall ptyc_term_handler (struct ptyc_term_ctx *);