/
Crimson2/alias/
Crimson2/area.tmp/
Crimson2/area.tmp/AnomalySpaceDock/
Crimson2/area.tmp/AnomalyStation/
Crimson2/area.tmp/AntHill/
Crimson2/area.tmp/ArcticTerrarium/
Crimson2/area.tmp/BuilderCity/
Crimson2/area.tmp/Dungeon/
Crimson2/area.tmp/MiningDock/
Crimson2/area.tmp/PipeSystem/
Crimson2/area.tmp/RattArea/
Crimson2/area.tmp/RobotFactory/
Crimson2/area.tmp/SilverDale/
Crimson2/area.tmp/StarshipFearless/
Crimson2/area.tmp/StationConduits/
Crimson2/area.tmp/TerrariumAlpha/
Crimson2/area.tmp/TerrariumBeta/
Crimson2/area.tmp/TestArea/
Crimson2/area.tmp/Void/
Crimson2/area/
Crimson2/area/AnomalySpaceDock/
Crimson2/area/AnomalyStation/
Crimson2/area/MiningDock/
Crimson2/area/PipeSystem/
Crimson2/area/SilverDale/
Crimson2/area/StationConduits/
Crimson2/area/Void/
Crimson2/board/
Crimson2/clone/
Crimson2/lib/
Crimson2/mole/
Crimson2/mole/mole_src/HELP/
Crimson2/player/
Crimson2/util/
Crimson2/wldedit/
Crimson2/wldedit/res/
#ifndef _ANSITERM_H_
#define _ANSITERM_H_

#define AT_WIND_CLASS_NAME "AnsiTerm:BCL 98/05/02"

/* window extra data offsets */
#define ATWND_ATTERMSEG 0  /* pointer to the window's ATTERM structure */
#define ATWND_ATTERMOFF 4  /* pointer to the window's ATTERM structure */

/* Emulation Modes */
#define AT_EMU_NONE  0
#define AT_EMU_VT100 1

/* constants */
#define TBSTR_TITLE_LEN  200     /* max # chars in title of window */
#define TBSTR_ENVSECTION  200    /* max size of environment string */
#define TBMACRO_MAXLEN 100
#define AT_ESC_PARAM_MAX 50
#define AT_STATEVAL_DEFAULT -1

/* effect bits */
#define AT_FONTEFFECT_BOLD      (1<<0)
#define AT_FONTEFFECT_UNDERLINE (1<<1)
#define AT_FONTEFFECT_BLINK     (1<<2)
#define AT_FONTEFFECT_REVERSE   (1<<3)

/* aNotify messages */
#define TBNOTIFY_MENUCLOSE   0x0001 /* user has choosen "close" from the menu
																		 * or system menu */
#define TBNOTIFY_USERINPUT   0x0002 /* user input is available for transmission */
#define TBNOTIFY_OPTIONS     0x0003 /* user options have changed                */
#define TBNOTIFY_OPTIONSHELP 0x0004 /* options Help requested                   */
#define TBNOTIFY_FONT        0x0005 /* user has selected a new display font     */
#define TBNOTIFY_FONTHELP    0x0006 /* font picker help requested               */
#define TBNOTIFY_MACROS      0x0007 /* user changed function key macros         */
#define TBNOTIFY_MACROSHELP  0x0008 /* function key macros help requested       */
#define ATNOTIFY_WINDOWSIZE  0x0009 /* Terminal window size has changed         */

typedef struct ATTERMtag {
	HINSTANCE aInst;         /* instance to which this term belongs */
	HGLOBAL aMemory;         /* our memory handle */
	HGLOBAL aOutBufMemory;   /* output buffer memory */
	unsigned char *aOutBuf;            /* output buffer */
	unsigned long aOutBufSize;        /* output buffer size */
	unsigned char *aOutBufSockTail;    /* outgoing socket position (tail) */
//  char *aOutBufLETail;    /* local echo position */
	unsigned char *aOutBufHead;        /* head position */
	HWND *aWnd;               /* our window */
	TBTERMBUF *aTermBuf;      /* our terminal buffer */
	long aShowX,aShowY;   /* the screen coordinate of the top-left shown cell */
	long aSizeX,aSizeY;   /* size of visible screen - updated by atAdjustTerm */
	long aScroll;         /* # lines to scroll up (neg for down) next WM_PAINT */
	HFONT aFont;          /* DO NOT CHANGE DIRECTLY - CALL atChangeFont!!! */
  HFONT aFontUnderline; /* DO NOT CHANGE DIRECTLY - CALL atChangeFont!!! */
	LOGFONT aLogFont;    /* DO NOT CHANGE DIRECTLY - CALL atChangeFont!!! */
	BOOL aLogFontValid;  /* TRUE if aLogFont is valid */
	long aFontX,aFontY;   /* assumed font cell width,height. DO NOT CHANGE DIRECTLY - CALL atChangeFont!!! */
	int* aState;          /* terminal state for the parsing state machine - see ATSTATE_* below */
//	long aState1,aState2; /* general-purpose sub-state variable (use varries) */
	long aStateVal[AT_ESC_PARAM_MAX];   /* parsed state variable array (if req'd) */
	long aStateValPos;    /* for use with above */
	char aEnvSection[TBSTR_ENVSECTION];/* environment (window position) section */
	char aTitle[TBSTR_TITLE_LEN]; /* Window title */
	void (*aNotify)(struct ATTERMtag *p_Term, int p_msg);    /* function called to notify of out-bound data is available */
	LRESULT CALLBACK (*aAuxMsgHandler)(struct ATTERMtag *p_Term,HWND p_hWnd, UINT p_message,WPARAM p_wParam, LPARAM p_lParam); /* function hook to operate unhandled window messages */
	long aLE_BSCount;     /* used to allow only x backspaces during local echo */
	/* aSeparateInputLine settings */
	RECT aScrollRect;     /* aSeparateInputLine: rect maintained of scroll region in the terminal -- NOTE this is only used if aSeparateInputLine is specified */
	long aInputWndDY;     /* aSeparateInputLine: Height of input window */
	long aInputBorderDY;  /* aSeparateInputLine: height of border between input window & main terminal */
	int  aInputFColour;   /* input line foreground colour */
	int  aInputBColour;   /* input line background colour */
	HGLOBAL aInputBufMemory;  /* input memory handle */
	unsigned char *aInputBuf; /* input line buffer */
	unsigned long aInputBufSize;
	unsigned char *aInputCurLine; /* start of current line text */
	unsigned char *aInputCurLineEnd; /* ending max character for current line */
	unsigned char *aInputCurPos;  /* Cursor position -- insert mode is always on */
	unsigned char *aInputDispCurPos; /* start of DISPLAYED position */
	unsigned char *aInputScrollBackPos; /* scroll back through previous cmds */
	long aInputScrollback; /* when they push up/down arrow, cycle through command history */
				/* The input line buffer looks like this: (0 = 0x00 character)
				 *
				 * d y0cmd a0cmd b0cmd c0current command00000000000000000cmd w0cmd x0cm
				 * ^   ^                 ^  ^       ^                    ^
				 *     aInputScrollBack  |  |       aInputCurPos         aInputCurLineEnd
				 *                  Pos  |  aInputDispCurPos
				 *                       aInputCurLine
	/* Mouse hilite settings */
	BOOL aMouseHiliteCapture; /* 0 normally, 1 if we've captured the mouse input */
	int aCaptureLastX,aCaptureLastY; /* the last location of the mouse, relative to client screen */
	/* terminal emulation options - this includes NVR settings */
	unsigned long aEmulation; /* AT_EMU_* setting */
	BOOL aSeparateInputLine;  /* if TRUE, input line is separate at bottom of screen */
	BOOL aLocalEcho;     /* TRUE for local echo */
	BOOL aBell;          /* audible bell */
	unsigned char aBackSpaceChar; /* backspace key character */
	unsigned char aDeleteChar;    /* delete character */

	/* Other terminal settings */
	unsigned char aFnKeyMacro[48][TBMACRO_MAXLEN];  /* plain, shift, control, shift-control */

	/* active emulation options - this is the "volatile" selectable settings and emulation settings */
	BOOL aVLocalEcho;
	BOOL aLED[4];                   /* TRUE=on        FALSE=off      */
	/* modes                             SET            RESET          */
	BOOL aLFwithNLMode;             /* TRUE=nl        FALSE=lf       */
	BOOL aCursorKeyAppMode;         /* TRUE=app       FALSE=cursor   */
	BOOL aANSIMode;                 /* TRUE=ANSI      FALSE=VT52     */
	BOOL aColumnMode;               /* TRUE=132       FALSE=80       */
	BOOL aScrollingMode;            /* TRUE=Smooth    FALSE=Jump     */
	BOOL aScreenMode;               /* TRUE=Reverse   FALSE=Normal   */
	BOOL aOriginMode;               /* TRUE=Relative  FALSE=Absolute */
	BOOL aWraparoundMode;           /* TRUE=on        FALSE=off      */
	BOOL aAutoRepeatMode;           /* TRUE=on        FALSE=off      */
	BOOL aInterlaceMode;            /* TRUE=on        FALSE=off      */
	BOOL aGraphicProcMode;          /* TRUE=on        FALSE=off      */  /* Graphic Processor */
	BOOL aKeypadMode;               /* TRUE=App       FALSE=Numeric  */
	char aCharacterSet[4];
	int aCurCharacterSet;
	int aSCSType; /* temporary holding place for state machine -- NOT a terminal setting!!! */

	/* ECMA-48 Codes and Modes */
	int aSIMD; /* Select Implicit Movement Direction */
	int aSLH;  /* Set Line Home - home position (starts at 1) */
	int aSLL;  /* Set Line Limit */
} ATTERM;

BOOL atInitAnsiTermApplication(HINSTANCE p_hInst);
BOOL atInitAnsiTerm(void);
void atShutdownAnsiTerm(void);
ATTERM *atAllocTerm(HINSTANCE p_hInst, HWND p_hParent,long p_BufX,long p_BufY,long p_ScrX,long p_ScrY, char *p_EnvSection, char *p_Title);
void atFreeTerm(ATTERM *p_Term);
void atAdjustTerm(ATTERM *p_Term,long p_Scrollback);
void atUpdateTermTitle(ATTERM *p_Term,char *p_NewTitle);
void atAdjustScrollbar(ATTERM *p_Term);
void atShowTerm(ATTERM *p_Term);
void atHideTerm(ATTERM *p_Term);
BOOL atIsTermVisible(ATTERM *p_Term);
int atSendTerm(void* p_TermA, unsigned char *p_Buf, int p_BufLen);
void atClearTerm(ATTERM *p_Term);
void atNotifyFn(unsigned long p_ID, unsigned int p_Operation, long p_P0,long p_P1, long p_P2, long p_P3);
LRESULT CALLBACK _export atAnsiTermProc(HWND p_hWnd, UINT p_message,WPARAM p_wParam, LPARAM p_lParam);
void atChangeFont(ATTERM *p_Term, HFONT p_font, LOGFONT *p_logfont);
void atUpdateCaret(ATTERM *p_Term);
void atScrollTermTo(ATTERM *p_Term,BOOL p_Rel,long p_Val);
long atReadTermInput(ATTERM *p_Term, unsigned char *p_Buf, unsigned long p_BufLen);
long atUnReadTermInput(ATTERM *p_Term, unsigned char *p_Buf, unsigned long p_BufLen);
long atWriteTermInput(ATTERM *p_Term, unsigned char *p_Buf, unsigned long p_BufLen);
void atSendTermInput(ATTERM *p_Term, unsigned char *p_Buf, unsigned long p_BufLen);
BOOL CALLBACK _export atAnsiTermOptionsProc(HWND p_hWnd, UINT p_message,WPARAM p_wParam, LPARAM p_lParam);
BOOL CALLBACK _export atATFnKeyProc(HWND p_hWnd, UINT p_message,WPARAM p_wParam, LPARAM p_lParam);
void atSaveTermSettings(ATTERM *p_Term, int p_Settings, char *p_Section);
void atLoadTermSettings(ATTERM *p_Term, int p_Settings, char *p_Section);
void atResetTerm(ATTERM *p_Term);
void atResetSeparateInputLine(ATTERM *p_Term);

#endif /* _ANSITERM_H_ */