#ifndef PTYCON_BRIDGE_IMPL_H #define PTYCON_BRIDGE_IMPL_H #include #include 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_RAW_EVENTS 0x400 #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 { uintptr_t in [PTYC_BUFFER_ELEMENTS/sizeof(uintptr_t)]; wchar16_t out [PTYC_BUFFER_ELEMENTS]; wchar16_t screen [PTYC_BUFFER_ELEMENTS]; }; struct ptyc_term_input { nt_input_record events [PTYC_RAW_EVENTS]; unsigned char stream [PTYC_RAW_EVENTS*4]; }; 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; uint16_t foreground; uint16_t background; nt_coord screen_size; nt_coord window_size; nt_console_screen_buffer_info screen_info; struct ptyc_term_data data; struct ptyc_term_input input; }; 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