/*--------------------------------*-C-*---------------------------------*
 * File:	screen.h
 *
 * This module is all new by Robert Nation
 * <nation@rocket.sanders.lockheed.com>
 *
 * Additional modifications by mj olesen <olesen@me.QueensU.CA>
 * No additional restrictions are applied.
 *
 * As usual, the author accepts no responsibility for anything, nor does
 * he guarantee anything whatsoever.
 *----------------------------------------------------------------------*/
#ifndef _SCREEN_H
#define _SCREEN_H

/* Screen refresh methods */
#define NO_REFRESH	2	/* Window not visible at all! */
#define SLOW_REFRESH	1	/* No Bitblt */
#define FAST_REFRESH	0

#define IGNORE	0
#define SAVE	's'
#define RESTORE	'r'

/*  flags for scr_gotorc() */
#define C_RELATIVE	1	/* col movement is relative */
#define R_RELATIVE	2	/* row movement is relative */
#define RELATIVE (R_RELATIVE|C_RELATIVE)	/* move row/col relative */

/* modes for scr_insdel_chars(), scr_insdel_lines() */
#define INSERT	-1		/* don't change these values */
#define DELETE	+1
#define ERASE	+2

/* modes for scr_page() */
#define UP	+1		/* don't change these values */
#define DOWN	-1

/* arguments for scr_change_screen() */
#define PRIMARY		0
#define SECONDARY	1

/* rendition style flags */
#define RS_None		0		/* Normal */
#define RS_Cursor	0x01000000	/* cursor location */
#define RS_Select	0x02000000	/* selected text */
#define RS_RVid		0x04000000	/* reverse video */
#define RS_Uline	0x08000000	/* underline */
#define RS_acsFont	0x10000000	/* ACS - graphics character set */
#define RS_ukFont	0x20000000	/* UK character set */
#define RS_fontMask	(RS_acsFont|RS_ukFont)
#ifdef KANJI
# define RS_kanji0	0x40000000	/* only kanji */
# define RS_kanji1	0x80000000	/* kanji 1st byte */
# define RS_kanjiMask	(RS_kanji0|RS_kanji1)	/* kanji 2nd byte */
#endif

#define RS_fgMask	0x00001F00	/* 32 colors */
#define RS_Bold		0x00008000	/* bold */
#define RS_bgMask	0x001F0000	/* 32 colors */
#define RS_Blink	0x00800000	/* blink */

#define RS_attrMask	(0xFF000000|RS_Bold|RS_Blink)

#ifndef NO_BOLDCOLOR
extern unsigned int color_fgbg;
#endif
#ifndef NO_COLORCURSOR
extern unsigned int color_cursor;
#endif

/* how to build & extract colors and attributes */
#define GET_FGCOLOR(r)	(((r) & RS_fgMask)>>8)
#define GET_BGCOLOR(r)	(((r) & RS_bgMask)>>16)
#define GET_ATTR(r)	(((r) & RS_attrMask))

#define SET_RSTYLE(r,fg,bg)	(((r) & RS_attrMask) | ((fg)<<8) | ((bg)<<16))
#define SET_FGCOLOR(r,fg)	(((r) & ~RS_fgMask)  | ((fg)<<8))
#define SET_BGCOLOR(r,bg)	(((r) & ~RS_bgMask)  | ((bg)<<16))
#define SET_ATTR(r,a)		(((r) & ~RS_attrMask)| (a))

#ifdef __cplusplus
extern "C" {
#endif
   extern void	scr_reset (void);
   extern void	scr_poweron (void);
   extern void	scr_backspace (void);
   extern void	scr_bell (void);
   extern int	scr_change_screen (int scrn);
   extern void	scr_rendition (int set, int style);
   extern void	scr_add_lines (const unsigned char *str, int nlines, int cnt);
   extern void	scr_tab (int count);
   extern void	scr_gotorc (int row, int col, int relative);
   extern void	scr_index (int direction);
   extern void	scr_cursor (int mode);
   extern void	scr_cursor_visible (int mode);
   extern void	scr_erase_line (int mode);
   extern void	scr_erase_screen (int mode);
   extern void	scr_insdel_lines (int count, int insdel);
   extern void	scr_insdel_chars (int count, int insdel);
   extern void	scr_scroll_region (int top, int bot);
   extern int	scr_move_to (int y, int len);
   extern int	scr_page (int dirn, int n);
   extern void	scr_report_position (void);
   extern void	scr_touch (int x, int y, int width, int height);
   extern void	scr_charset_choose (int set);
   extern void	scr_charset_set (int set, unsigned char ch);
   extern void	scr_refresh_region (int startr, int endr, int type);
   extern void	scr_refresh (int type);
   extern void	scr_set_tab (int mode);
   extern void	scr_E (void);
   extern void	scr_color (int color, int Intensity);
   extern void	scr_fgcolor (int color);
   extern void	scr_bgcolor (int color);
   extern void	mouse_report (XButtonEvent *ev);
   /* mode selections */
   extern void	scr_autowrap (int mode);
   extern void	scr_relative_origin (int mode);
   extern void	scr_insert_mode (int mode);
   extern void	scr_rvideo_mode (int mode);
#ifdef PRINTPIPE
   extern void	scr_printscreen (int fullhist);
#endif
   extern void	selection_make (Time time);
   extern void	selection_send (XSelectionRequestEvent *rq);
   extern void	selection_paste (Window win, int prop, int Delete);
   extern void	selection_request (Time time, int x, int y);
   extern void	selection_reset (void);
   extern void	selection_clear (void);
   extern void	selection_extend (int hilite, int x, int y);
   extern void	selection_start (int x, int y);
   extern void	selection_click (int clicks, int x, int y);
#ifdef KANJI
   extern void	set_kanji_encoding (const char *str);
#endif
#ifdef __cplusplus
}
#endif

#endif	/* whole file */
/*----------------------- end-of-file (C header) -----------------------*/
