#ifndef _CURSHDR_H
#define _CURSHDR_H
#ifdef __cplusplus
extern "C" {
#endif
#define _NOHASH (-1)
#define _REDRAW (-2)
#define _BLANK (-3)
#define _THASH (123)
#define _KEY (01)
#define _MACRO (02)
#define _INPUTPENDING cur_term->_iwait
#define _PUTS(x, y) (void) tputs(x, y, _outch)
#define _VIDS(na, oa) (vidupdate((na), (oa), _outch), curscr->_attrs = (na))
#define _ONINSERT() (_PUTS(enter_insert_mode, 1), SP->phys_irm = TRUE)
#define _OFFINSERT() (_PUTS(exit_insert_mode, 1), SP->phys_irm = FALSE)
#define _STRNOTEQ(a, b) (a == NULL ? (b != NULL) : \
(b == NULL ? 1 : strcmp(a, b)))
#define LARGECOST 500
typedef struct
{
short icfixed;
short dcfixed;
short Insert_character;
short Delete_character;
short Cursor_home;
short Cursor_to_ll;
short Cursor_left;
short Cursor_right;
short Cursor_down;
short Cursor_up;
short Carriage_return;
short Tab;
short Back_tab;
short Clr_eol;
short Clr_bol;
short Parm_ich;
short Parm_dch;
short Parm_left_cursor;
short Parm_up_cursor;
short Parm_down_cursor;
short Parm_right_cursor;
short Cursor_address;
short Row_address;
} COSTS;
#define _COST(field) (SP->term_costs.field)
#define LABMAX 16
#define LABLEN 8
typedef struct
{
WINDOW *_win;
char _ldis[LABMAX][LABLEN+1];
char _lval[LABMAX][LABLEN+1];
short _labx[LABMAX];
short _num;
short _len;
bool _changed;
bool _lch[LABMAX];
} SLK_MAP;
struct screen
{
unsigned fl_echoit : 1;
unsigned fl_endwin : 2;
unsigned fl_meta : 1;
unsigned fl_nonl : 1;
unsigned yesidln : 1;
unsigned dmode : 1;
unsigned imode : 1;
unsigned ichok : 1;
unsigned dchok : 1;
unsigned sid_equal : 1;
unsigned eid_equal : 1;
unsigned phys_irm : 1;
long baud;
short kp_state;
short Yabove;
short lsize;
short csize;
short tsize;
WINDOW *std_scr;
WINDOW *cur_scr;
WINDOW *virt_scr;
int *cur_hash;
int *virt_hash;
TERMINAL *tcap;
FILE *term_file;
FILE *input_file;
SLK_MAP *slk;
char **_mks;
COSTS term_costs;
SGTTY save_tty_buf;
#ifdef SYSV
SGTTYS save_tty_bufs;
#endif
char **_color_mks;
unsigned long _trap_mbe;
unsigned long _map_mbe_to_key;
};
extern SCREEN *SP;
extern WINDOW *_virtscr;
#ifdef DEBUG
#ifndef outf
extern FILE *outf;
#endif
#endif
extern short cswidth[],
_curs_scrwidth[];
extern short _csmax,
_scrmax;
extern bool _mbtrue;
#define MBIT 0200
#define CBIT 002000000000
#define RBYTE(x) ((x) & 0377)
#define LBYTE(x) (((x) >> 8) & 0177)
#define ISMBIT(x) ((x) & MBIT)
#define SETMBIT(x) ((x) |= MBIT)
#define CLRMBIT(x) ((x) &= ~MBIT)
#define ISCBIT(x) ((x) & CBIT)
#define SETCBIT(x) ((x) |= CBIT)
#define CLRCBIT(x) ((x) &= ~CBIT)
#define TYPE(x) ((x) == SS2 ? 1 : (x) == SS3 ? 2 : ISMBIT(x) ? 0 : 3)
#define TRIM 037777777777
#define MAGNUM 0432
#define SVR2_DUMP_MAGIC_NUMBER 0433
#define SVR3_DUMP_MAGIC_NUMBER 0434
#ifdef SYSV
#define _BR(x) (x.c_cflag & CBAUD)
#define _BRS(x) (cfgetospeed(&x))
#include <values.h>
#else
#define BITSPERBYTE 8
#define MAXINT 32767
#define _BR(x) (x.sg_ispeed)
#endif
#define _BLNKCHAR ' '
#define _CTRL(c) (c | 0100)
#define _ATTR(c) ((c) & A_ATTRIBUTES)
#define _CHAR(c) ((c) & A_CHARTEXT)
#define _WCHAR(w, c) (_CHAR((c) == _BLNKCHAR ? (w)->_bkgd : (c))| \
(((c) & A_COLOR) ? ((w)->_attrs & ~A_COLOR) : \
((w)->_attrs)))
#define _DARKCHAR(c) ((c) != _BLNKCHAR)
#define _UNCTRL(c) ((c) ^ 0100)
#define _BEGNS curscr->_firstch
#define _ENDNS curscr->_lastch
#define _CURHASH SP->cur_hash
#define _VIRTHASH SP->virt_hash
#define _VIRTTOP _virtscr->_parx
#define _VIRTBOT _virtscr->_pary
#define _MARKS SP->_mks
#define _COLOR_MARKS SP->_color_mks
#define _NUMELEMENTS(x) (sizeof (x)/sizeof (x[0]))
#ifdef _VR3_COMPAT_CODE
#define _TO_OCHTYPE(x) ((_ochtype)(((x&A_ATTRIBUTES)>>9)|(x&0177)))
#define _FROM_OCHTYPE(x) ((chtype) ((x&0177) | ((x&0177600)<<9)))
extern void (*_y16update)(WINDOW *, int, int, int, int);
#endif
extern int (*_setidln)(void);
extern int (*_useidln)(void);
extern int (*_quick_ptr)(WINDOW *, chtype);
extern int (_quick_echo)(WINDOW *, chtype);
#define _MIN(a, b) ((a) < (b) ? (a) : (b))
#define _MAX(a, b) ((a) > (b) ? (a) : (b))
extern int (*_do_slk_ref)(void);
extern int (*_do_slk_tch)(void);
extern int (*_do_slk_noref)(void);
extern int _image(WINDOW *);
extern int _outch(char);
extern int _outwch(chtype);
extern int _chkinput(void);
extern int _curs_mbtowc(wchar_t *, const char *, size_t);
extern int _curs_wctomb(char *, wchar_t);
extern int _delay(int, int (*)(char));
extern int _mbaddch(WINDOW *, chtype, chtype);
extern int _mbclrch(WINDOW *, int, int);
extern int _mbinsshift(WINDOW *, int), _mbvalid(WINDOW *);
extern int _padjust(WINDOW *, int, int, int, int, int, int);
extern int _prefresh(int (*)(WINDOW *), WINDOW *, int, int, int,
int, int, int);
extern int _overlap(WINDOW *, WINDOW *, int);
extern int _scr_all(char *, int);
extern int _slk_update(void);
extern int _tcsearch(char *, short [], char *[], int, int);
extern int _vsscanf(const char *, const char *, __va_list);
extern int force_doupdate(void);
extern int init_acs(void);
extern int mbscrw(int);
extern int mbeucw(int);
extern int scr_ll_dump(FILE *);
extern int scr_reset(FILE *, int);
extern int setkeymap(void);
extern int ttimeout(int);
extern int wadjcurspos(WINDOW *);
extern int wcscrw(wchar_t);
extern int wmbmove(WINDOW *, int, int);
extern chtype tgetch(int);
extern WINDOW *_makenew(int, int, int, int);
extern void (*_slk_init)(void);
extern void (*_rip_init)(void);
extern void delkeymap(TERMINAL *);
extern void mbgetwidth(void);
extern void memSset(chtype *, chtype, int);
extern void _blast_keys(TERMINAL *);
extern void _init_costs(void);
extern void _init_HP_pair(short, short, short);
extern void _update_old_y_area(WINDOW *, int, int, int, int);
extern char *tparm_p0(char *);
extern char *tparm_p1(char *, long);
extern char *tparm_p2(char *, long, long);
extern char *tparm_p3(char *, long, long, long);
extern char *tparm_p4(char *, long, long, long, long);
extern char *tparm_p7(char *, long, long, long, long, long, long, long);
extern char *infotocap(char *, int *);
extern char *_strcode2byte(wchar_t *, char *, int);
extern char *wmbinch(WINDOW *, int, int);
#ifdef __cplusplus
}
#endif
#endif