summaryrefslogtreecommitdiffhomepage
path: root/src/internal/ptycon_bridge_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal/ptycon_bridge_impl.h')
-rw-r--r--src/internal/ptycon_bridge_impl.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/internal/ptycon_bridge_impl.h b/src/internal/ptycon_bridge_impl.h
new file mode 100644
index 0000000..b70497e
--- /dev/null
+++ b/src/internal/ptycon_bridge_impl.h
@@ -0,0 +1,55 @@
+#ifndef PTYCON_BRIDGE_IMPL_H
+#define PTYCON_BRIDGE_IMPL_H
+
+#include <psxtypes/psxtypes.h>
+
+enum ptyc_ctrl_state {
+ PTYC_CTRL_STATE_ESI,
+ PTYC_CTRL_STATE_PARAM_HANDLERS,
+ PTYC_CTRL_STATE_COMMAND_HANDLERS,
+ PTYC_CTRL_STATE_CAP
+};
+
+#define PTYC_BUFFER_ELEMENTS 0x8000
+#define PTYC_CTRL_PARAMS 0x20
+
+#define PTYC_ESI_ARRAY_SIZE 0x5F
+#define PTYC_CSI_ARRAY_SIZE 0x6F
+#define PTYC_SGR_ARRAY_SIZE 0x6D
+
+
+struct ptyc_term_data {
+ unsigned char in [PTYC_BUFFER_ELEMENTS];
+ wchar16_t out [PTYC_BUFFER_ELEMENTS];
+ wchar16_t screen [PTYC_BUFFER_ELEMENTS];
+};
+
+struct ptyc_term_ctx;
+
+typedef void * __fastcall ptyc_term_handler (struct ptyc_term_ctx *);
+
+struct ptyc_term_ctx {
+ void * hin;
+ void * hout;
+ wchar16_t * wch_pty;
+ wchar16_t * wch_con;
+ unsigned char * ctrl;
+ uint32_t ctrl_cap;
+ uint32_t * ctrl_mark;
+ uint32_t ctrl_state;
+ uint32_t * ctrl_param;
+ uint32_t ctrl_params[PTYC_CTRL_PARAMS];
+ ptyc_term_handler * handler;
+ ptyc_term_handler * char_handler;
+ ptyc_term_handler * ctrl_handler;
+ ptyc_term_handler * const * ctrl_handlers[PTYC_CTRL_STATE_CAP];
+ ptyc_term_handler * ctrl_command;
+ struct ptyc_term_data data;
+};
+
+extern ptyc_term_handler * const ptyc_esi_handlers[];
+extern ptyc_term_handler * const ptyc_cmd_handlers[];
+extern ptyc_term_handler * const ptyc_csi_handlers[];
+extern ptyc_term_handler * const ptyc_sgr_handlers[];
+
+#endif