Blob Blame History Raw
#ifndef PTYCON_BRIDGE_IMPL_H
#define PTYCON_BRIDGE_IMPL_H

#include <psxtypes/psxtypes.h>
#include <ntcon/ntcon.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_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