/* vi:set ts=8 sts=4 sw=4:
 *
 * VIM - Vi IMproved	by Bram Moolenaar
 *
 * Do ":help uganda"  in Vim to read copying and usage conditions.
 * Do ":help credits" in Vim to see a list of people who contributed.
 */

/*
 * This file contains the defines for the machine dependent escape sequences
 * that the editor needs to perform various operations. All of the sequences
 * here are optional, except "cm" (cursor motion).
 */

#if defined(SASC) && SASC < 658
/*
 * The SAS C compiler has a bug that makes typedefs being forgot in include
 * files.  Has been fixed in version 6.58.
 */
typedef unsigned char char_u;
#endif

/*
 * Index of the termcap codes in the term_strings array.
 */
enum SpecialKey
{
    KS_NAME = 0,/* name of this terminal entry */
    KS_CE,	/* clear to end of line */
    KS_AL,	/* add new blank line */
    KS_CAL,	/* add number of blank lines */
    KS_DL,	/* delete line */
    KS_CDL,	/* delete number of lines */
    KS_CS,	/* scroll region */
    KS_CL,	/* clear screen */
    KS_CD,	/* clear to end of display */
    KS_UT,	/* clearing uses current background color */
    KS_DA,	/* text may be scrolled down from up */
    KS_DB,	/* text may be scrolled up from down */
    KS_VI,	/* cursor invisible */
    KS_VE,	/* cursor visible */
    KS_VS,	/* cursor very visible */
    KS_ME,	/* normal mode */
    KS_MR,	/* reverse mode */
    KS_MD,	/* bold mode */
    KS_SE,	/* normal mode */
    KS_SO,	/* standout mode */
    KS_CZH,	/* italic mode start */
    KS_CZR,	/* italic mode end */
    KS_UE,	/* exit underscore mode */
    KS_US,	/* underscore mode */
    KS_MS,	/* save to move cur in reverse mode */
    KS_CM,	/* cursor motion */
    KS_SR,	/* scroll reverse (backward) */
    KS_CRI,	/* cursor number of chars right */
    KS_VB,	/* visual bell */
    KS_KS,	/* put term in "keypad transmit" mode */
    KS_KE,	/* out of "keypad transmit" mode */
    KS_TI,	/* put terminal in termcap mode */
    KS_TE,	/* out of termcap mode */
    KS_BC,	/* backspace character (cursor left) */
    KS_CCS,	/* cur is relative to scroll region */
    KS_CCO,	/* number of colors */
    KS_CSF,	/* set foreground color */
    KS_CSB,	/* set background color */
    KS_XS,	/* standout not erased by overwriting (hpterm) */
    KS_MB,	/* blink mode */
    KS_CAF,	/* set foreground color (ANSI) */
    KS_CAB,	/* set background color (ANSI) */
    KS_LE,	/* cursor left (mostly backspace) */
    KS_ND,	/* cursor right */
    KS_CIS,	/* set icon text start */
    KS_CIE,	/* set icon text end */
    KS_TS,	/* set window title start (to status line)*/
    KS_FS,	/* set window title end (from status line) */
    KS_CWP,	/* set window position in pixels */
    KS_CWS,	/* set window size in characters */
    KS_CRV,	/* request version string */
    KS_CSI,	/* start insert mode (bar cursor) */
    KS_CEI,	/* end insert mode (block cursor) */
#ifdef FEAT_VERTSPLIT
    KS_CSV,	/* scroll region vertical */
#endif
    KS_OP	/* original color pair */
};

#define KS_LAST	    KS_OP

/*
 * the terminal capabilities are stored in this array
 * IMPORTANT: When making changes, note the following:
 * - there should be an entry for each code in the builtin termcaps
 * - there should be an option for each code in option.c
 * - there should be code in term.c to obtain the value from the termcap
 */

extern char_u *(term_strings[]);    /* current terminal strings */

/*
 * strings used for terminal
 */
#define T_NAME	(term_str(KS_NAME))	/* terminal name */
#define T_CE	(term_str(KS_CE))	/* clear to end of line */
#define T_AL	(term_str(KS_AL))	/* add new blank line */
#define T_CAL	(term_str(KS_CAL))	/* add number of blank lines */
#define T_DL	(term_str(KS_DL))	/* delete line */
#define T_CDL	(term_str(KS_CDL))	/* delete number of lines */
#define T_CS	(term_str(KS_CS))	/* scroll region */
#define T_CSV	(term_str(KS_CSV))	/* scroll region vertical */
#define T_CL	(term_str(KS_CL))	/* clear screen */
#define T_CD	(term_str(KS_CD))	/* clear to end of display */
#define T_UT	(term_str(KS_UT))	/* clearing uses background color */
#define T_DA	(term_str(KS_DA))	/* text may be scrolled down from up */
#define T_DB	(term_str(KS_DB))	/* text may be scrolled up from down */
#define T_VI	(term_str(KS_VI))	/* cursor invisible */
#define T_VE	(term_str(KS_VE))	/* cursor visible */
#define T_VS	(term_str(KS_VS))	/* cursor very visible */
#define T_ME	(term_str(KS_ME))	/* normal mode */
#define T_MR	(term_str(KS_MR))	/* reverse mode */
#define T_MD	(term_str(KS_MD))	/* bold mode */
#define T_SE	(term_str(KS_SE))	/* normal mode */
#define T_SO	(term_str(KS_SO))	/* standout mode */
#define T_CZH	(term_str(KS_CZH))	/* italic mode start */
#define T_CZR	(term_str(KS_CZR))	/* italic mode end */
#define T_UE	(term_str(KS_UE))	/* exit underscore mode */
#define T_US	(term_str(KS_US))	/* underscore mode */
#define T_MS	(term_str(KS_MS))	/* save to move cur in reverse mode */
#define T_CM	(term_str(KS_CM))	/* cursor motion */
#define T_SR	(term_str(KS_SR))	/* scroll reverse (backward) */
#define T_CRI	(term_str(KS_CRI))	/* cursor number of chars right */
#define T_VB	(term_str(KS_VB))	/* visual bell */
#define T_KS	(term_str(KS_KS))	/* put term in "keypad transmit" mode */
#define T_KE	(term_str(KS_KE))	/* out of "keypad transmit" mode */
#define T_TI	(term_str(KS_TI))	/* put terminal in termcap mode */
#define T_TE	(term_str(KS_TE))	/* out of termcap mode */
#define T_BC	(term_str(KS_BC))	/* backspace character */
#define T_CCS	(term_str(KS_CCS))	/* cur is relative to scroll region */
#define T_CCO	(term_str(KS_CCO))	/* number of colors */
#define T_CSF	(term_str(KS_CSF))	/* set foreground color */
#define T_CSB	(term_str(KS_CSB))	/* set background color */
#define T_XS	(term_str(KS_XS))	/* standout not erased by overwriting */
#define T_MB	(term_str(KS_MB))	/* blink mode */
#define T_CAF	(term_str(KS_CAF))	/* set foreground color (ANSI) */
#define T_CAB	(term_str(KS_CAB))	/* set background color (ANSI) */
#define T_LE	(term_str(KS_LE))	/* cursor left */
#define T_ND	(term_str(KS_ND))	/* cursor right */
#define T_CIS	(term_str(KS_CIS))	/* set icon text start */
#define T_CIE	(term_str(KS_CIE))	/* set icon text end */
#define T_TS	(term_str(KS_TS))	/* set window title start */
#define T_FS	(term_str(KS_FS))	/* set window title end */
#define T_CWP	(term_str(KS_CWP))	/* window position */
#define T_CWS	(term_str(KS_CWS))	/* window size */
#define T_CSI	(term_str(KS_CSI))	/* start insert mode */
#define T_CEI	(term_str(KS_CEI))	/* end insert mode */
#define T_CRV	(term_str(KS_CRV))	/* request version string */
#define T_OP	(term_str(KS_OP))	/* original color pair */

#define TMODE_COOK  0	/* terminal mode for external cmds and Ex mode */
#define TMODE_SLEEP 1	/* terminal mode for sleeping (cooked but no echo) */
#define TMODE_RAW   2	/* terminal mode for Normal and Insert mode */
