/*
 * CONSOLE : Consoleプログラム：クライアント管理ヘッダー
 * Copyright(C) 1997-1999 Eiichiro Ito, Yasuhiro Mizukoshi, Fjw
 *
 * 1997/07/04:Eiichiro Ito
 *  (1) 作成開始
 * 修正履歴
 * 1998/02/15:Yasuhiro Mizukoshi
 *  (1) ESCシーケンス対応
 * 1998/02/19:Eiichiro Ito
 *  (1) 画面更新ロジック修正
 * 1998/02/20:Eiichiro Ito
 *  (1) 反転表示対応
 * 1998/03/31:Yasuhiro Mizukoshi
 *  (1) ESCシーケンス修正
 * 1998/04/11:Fjw
 *  (1) 特殊グラフィックキャラクタの処理の追加
 *
 */
#define		TcpServer		TEXT("Console")

#define	MAX_CLIENT		10
#define	TERMBUFF_SIZE	512
#define	KEYBUFF_SIZE	16

struct ClientList_t {
	HANDLE	hWnd ;

#define	TTY_NORMAL		0
#define	TTY_VT100		1
	int		ttymode;

#define	TERM_DATA		0
#define	TERM_ESC		1
#define	TERM_CSI		2
#define	TERM_G0			3	// Fjw '('
#define	TERM_G1			4	// Fjw ')'
	int	  term_state;

	char  term_tmp[KEYBUFF_SIZE];
	int   term_tmp_pos;
	DWORD col_tmp, line_tmp;
	DWORD scroll_top, scroll_bottom;
	int   tab_size;
	BOOL  bConsDraw;
								/*	Set		/	Reset		*/
#define	INSERT		0x00000001	/*	Insert		Replace		*/
#define	NEWL_LF		0x00000002	/*	NewLine		LineFeed	*/
#define	CURSORKEY	0x00000004	/*	Application	Cursor		*/
#define	ANSI_VT52	0x00000008	/*	ANSI		VT52		*/
#define	COLUMN_NUM	0x00000010	/*	132			80			*/
#define	SCROLLING	0x00000020	/*	Smooth		Jump		*/
#define	SCREEN		0x00000040	/*	Reverse		Normal		*/
#define	ORIGIN		0x00000080	/*	Relative	Absolute	*/
#define	AUTOWRAP	0x00000100	/*	On			Off			*/
#define	AUTOREPEAT	0x00000200	/*	On			Off			*/
#define	SHOWCURSOR	0x00000400	/*	Show		Hide		*/
#define	DEFAULT_TERMSETUP	(NEWL_LF|ANSI_VT52|AUTOWRAP|AUTOREPEAT)
	DWORD TermSetup;

								/*	Set		/	Reset		*/
#define	REVERSE		0x00000001	/*	On			Off			*/
	BYTE	bTermAttr ;

// キャラクタセットの定義 Fjw
#define	CS_USASCII		0
#define	CS_GRAPH		1	// Special characters and line drawing set (特殊グラフィック)
#define	CS_ALTROM		2	// Alternate character ROM
#define	CS_ALTROM2		3	// Alternate character ROM -- Special characters
#define	CS_JIS			4	// JIS Roman
#define	CS_KANA			5	// カタカナ
	int		char_set;		// 現在のキャラクタセット
	int		G0_char_set;	// G0に設定されているキャラクタセット
	int		G1_char_set;	// G1に設定されているキャラクタセット
};

#define	CurTerm		(ClientList[Cur_client - 1])

DWORD	client_add( HANDLE hGetchar ) ;
void	client_del( HANDLE hGetchar ) ;
void	client_send( TCHAR c ) ;
void	str_client_send( LPCTSTR buf ) ;
void	client_killall( void ) ;
DWORD	client_getindex( HWND hWnd ) ;
BOOL	client_switch( DWORD idx ) ;
void	client_break( void ) ;
BOOL	client_exists( void ) ;
