From 82e8e7164b665142320a0191a402c09e4c458d2c Mon Sep 17 00:00:00 2001 From: midipix Date: Mon, 11 Jul 2016 00:32:21 -0400 Subject: bridge: added initial esi logic. --- project/common.mk | 1 + project/tree.mk | 1 + src/bridge/ptyc_term_esi.c | 174 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+) create mode 100644 src/bridge/ptyc_term_esi.c diff --git a/project/common.mk b/project/common.mk index 603b3fc..cf5cf90 100644 --- a/project/common.mk +++ b/project/common.mk @@ -1,4 +1,5 @@ COMMON_SRCS = \ + src/bridge/ptyc_term_esi.c \ src/console/ptyc_console_alloc.c \ src/console/ptyc_console_ctrl.c \ src/console/ptyc_console_poller.c \ diff --git a/project/tree.mk b/project/tree.mk index 535fde1..9b2966f 100644 --- a/project/tree.mk +++ b/project/tree.mk @@ -1,5 +1,6 @@ tree.tag: mkdir -p src + mkdir -p src/bridge mkdir -p src/console mkdir -p src/debug mkdir -p src/driver diff --git a/src/bridge/ptyc_term_esi.c b/src/bridge/ptyc_term_esi.c new file mode 100644 index 0000000..aa105e6 --- /dev/null +++ b/src/bridge/ptyc_term_esi.c @@ -0,0 +1,174 @@ +/*********************************************************/ +/* ptycon: a pty-console bridge */ +/* Copyright (C) 2016 Z. Gilboa */ +/* Released under GPLv2 and GPLv3; see COPYING.PTYCON. */ +/*********************************************************/ + +#include + +#include +#include "ptycon_bridge_impl.h" + +/* forward declarations */ +static ptyc_term_handler esi_illegal_code; +static ptyc_term_handler esi_left_bracket; +static ptyc_term_handler esi_right_bracket; +static ptyc_term_handler esi_left_parenthesis; +static ptyc_term_handler esi_right_parenthesis; + +ptyc_term_handler * const ptyc_esi_handlers[PTYC_ESI_ARRAY_SIZE] = { + esi_illegal_code, /* 0x00 */ + esi_illegal_code, /* 0x01 */ + esi_illegal_code, /* 0x02 */ + esi_illegal_code, /* 0x03 */ + esi_illegal_code, /* 0x04 */ + esi_illegal_code, /* 0x05 */ + esi_illegal_code, /* 0x06 */ + esi_illegal_code, /* 0x07 */ + esi_illegal_code, /* 0x08 */ + esi_illegal_code, /* 0x09 */ + esi_illegal_code, /* 0x0a */ + esi_illegal_code, /* 0x0b */ + esi_illegal_code, /* 0x0c */ + esi_illegal_code, /* 0x0d */ + esi_illegal_code, /* 0x0e */ + esi_illegal_code, /* 0x0f */ + esi_illegal_code, /* 0x10 */ + esi_illegal_code, /* 0x11 */ + esi_illegal_code, /* 0x12 */ + esi_illegal_code, /* 0x13 */ + esi_illegal_code, /* 0x14 */ + esi_illegal_code, /* 0x15 */ + esi_illegal_code, /* 0x16 */ + esi_illegal_code, /* 0x17 */ + esi_illegal_code, /* 0x18 */ + esi_illegal_code, /* 0x19 */ + esi_illegal_code, /* 0x1a */ + esi_illegal_code, /* 0x1b */ + esi_illegal_code, /* 0x1c */ + esi_illegal_code, /* 0x1d */ + esi_illegal_code, /* 0x1e */ + esi_illegal_code, /* 0x1f */ + esi_illegal_code, /* 0x20 */ + esi_illegal_code, /* 0x21 */ + esi_illegal_code, /* 0x22 */ + esi_illegal_code, /* 0x23 */ + esi_illegal_code, /* 0x24 */ + esi_illegal_code, /* 0x25 */ + esi_illegal_code, /* 0x26 */ + esi_illegal_code, /* 0x27 */ + esi_left_parenthesis, /* 0x28 */ /* TODO: */ + esi_right_parenthesis, /* 0x29 */ /* TODO: */ + esi_illegal_code, /* 0x2a */ + esi_illegal_code, /* 0x2b */ + esi_illegal_code, /* 0x2c */ + esi_illegal_code, /* 0x2d */ + esi_illegal_code, /* 0x2e */ + esi_illegal_code, /* 0x2f */ + esi_illegal_code, /* 0x30 */ + esi_illegal_code, /* 0x31 */ + esi_illegal_code, /* 0x32 */ + esi_illegal_code, /* 0x33 */ + esi_illegal_code, /* 0x34 */ + esi_illegal_code, /* 0x35 */ + esi_illegal_code, /* 0x36 */ + esi_illegal_code, /* 0x37 */ + esi_illegal_code, /* 0x38 */ + esi_illegal_code, /* 0x39 */ + esi_illegal_code, /* 0x3a */ + esi_illegal_code, /* 0x3b */ + esi_illegal_code, /* 0x3c */ + esi_illegal_code, /* 0x3d */ + esi_illegal_code, /* 0x3e */ + esi_illegal_code, /* 0x3f */ + esi_illegal_code, /* 0x40 */ + esi_illegal_code, /* 0x41 */ + esi_illegal_code, /* 0x42 */ + esi_illegal_code, /* 0x43 */ + esi_illegal_code, /* 0x44 */ + esi_illegal_code, /* 0x45 */ + esi_illegal_code, /* 0x46 */ + esi_illegal_code, /* 0x47 */ + esi_illegal_code, /* 0x48 */ + esi_illegal_code, /* 0x49 */ + esi_illegal_code, /* 0x4a */ + esi_illegal_code, /* 0x4b */ + esi_illegal_code, /* 0x4c */ + esi_illegal_code, /* 0x4d */ + esi_illegal_code, /* 0x4e */ + esi_illegal_code, /* 0x4f */ + esi_illegal_code, /* 0x50 */ + esi_illegal_code, /* 0x51 */ + esi_illegal_code, /* 0x52 */ + esi_illegal_code, /* 0x53 */ + esi_illegal_code, /* 0x54 */ + esi_illegal_code, /* 0x55 */ + esi_illegal_code, /* 0x56 */ + esi_illegal_code, /* 0x57 */ + esi_illegal_code, /* 0x58 */ + esi_illegal_code, /* 0x59 */ + esi_illegal_code, /* 0x5a */ + esi_left_bracket, /* 0x5b */ /* CSI */ + esi_illegal_code, /* 0x5c */ + esi_right_bracket, /* 0x5d */ /* TODO: */ + esi_illegal_code /* 0x5e */ +}; + + +static void * __fastcall esi_illegal_code(struct ptyc_term_ctx * tctx) +{ + /* defer to the screen handler routine */ + return tctx->char_handler; +} + + +static void * __fastcall esi_select( + struct ptyc_term_ctx * tctx, + ptyc_term_handler * const * handlers, + unsigned int ctrl_cap) +{ + /* set state to param handlers */ + tctx->ctrl_state = PTYC_CTRL_STATE_PARAM_HANDLERS; + + /* select param handler array */ + tctx->ctrl_handlers[tctx->ctrl_state] = handlers; + tctx->ctrl_cap = ctrl_cap; + + /* prepare to read the first ctrl param */ + tctx->ctrl_param = tctx->ctrl_params; + tctx->ctrl_params[0] = 0; + + /* advance the stream pointer */ + tctx->wch_pty++; + + /* retain mode */ + return tctx->ctrl_handler; +} + + +static void * __fastcall esi_left_bracket(struct ptyc_term_ctx * tctx) +{ + /* todo: pass ptyc_csi_handlers */ + return esi_select(tctx,0,PTYC_CSI_ARRAY_SIZE); +} + + +static void * __fastcall esi_right_bracket(struct ptyc_term_ctx * tctx) +{ + /* todo: */ + return esi_illegal_code(tctx); +} + + +static void * __fastcall esi_left_parenthesis(struct ptyc_term_ctx * tctx) +{ + /* todo: */ + return esi_illegal_code(tctx); +} + + +static void * __fastcall esi_right_parenthesis(struct ptyc_term_ctx * tctx) +{ + /* todo: */ + return esi_illegal_code(tctx); +} -- cgit v1.2.3