/* 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 */
#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_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 */
