You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PDCursesMod/curspriv.h

275 lines
10 KiB
C

/* Private definitions and declarations for use within PDCurses.
These should generally not be referenced by applications. */
#ifndef __CURSES_INTERNALS__
#define __CURSES_INTERNALS__ 1
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
# define _CRT_SECURE_NO_DEPRECATE 1 /* kill nonsense warnings */
#endif
#define CURSES_LIBRARY
#include <curses.h>
#ifdef __cplusplus
extern "C" {
#endif
#if defined(__TURBOC__) || defined(__EMX__) || defined(__DJGPP__) || \
defined(PDC_99) || defined(__WATCOMC__)
# if !defined( HAVE_VSSCANF) && !defined( __DMC__)
# define HAVE_VSSCANF 1 /* have vsscanf() */
# endif
#endif
#if defined(PDC_99) || defined(__WATCOMC__)
# if !defined( HAVE_SNPRINTF) && !defined( __DMC__)
# define HAVE_SNPRINTF 1 /* have snprintf() */
# endif
# if !defined( HAVE_VSNPRINTF) && !defined( __DMC__)
# define HAVE_VSNPRINTF 1 /* have vsnprintf() */
# endif
#endif
#if defined( PDC_FORCE_UTF8) && !defined( PDC_WIDE)
#define PDC_WIDE
#endif
/*----------------------------------------------------------------------*/
typedef struct /* structure for ripped off lines */
{
int line;
int (*init)(WINDOW *, int);
WINDOW *win;
} RIPPEDOFFLINE;
/* Window properties */
#define _SUBWIN 0x01 /* window is a subwindow */
#define _PAD 0x10 /* X/Open Pad. */
#define _SUBPAD 0x20 /* X/Open subpad. */
/* Miscellaneous */
#define _NO_CHANGE -1 /* flags line edge unchanged */
#define _ECHAR 0x08 /* Erase char (^H) */
#define _DWCHAR 0x17 /* Delete Word char (^W) */
#define _DLCHAR 0x15 /* Delete Line char (^U) */
/*----------------------------------------------------------------------*/
/* Platform implementation functions */
void PDC_beep(void);
bool PDC_can_change_color(void);
int PDC_color_content(int, int *, int *, int *);
bool PDC_check_key(void);
int PDC_curs_set(int);
void PDC_doupdate(void);
void PDC_flushinp(void);
int PDC_get_columns(void);
int PDC_get_cursor_mode(void);
int PDC_get_key(void);
int PDC_get_rows(void);
void PDC_gotoyx(int, int);
bool PDC_has_mouse(void);
int PDC_init_color(int, int, int, int);
int PDC_modifiers_set(void);
int PDC_mouse_set(void);
void PDC_napms(int);
void PDC_reset_prog_mode(void);
void PDC_reset_shell_mode(void);
int PDC_resize_screen(int, int);
void PDC_restore_screen_mode(int);
void PDC_save_screen_mode(int);
#ifdef XCURSES
void PDC_set_args(int, char **);
#endif
void PDC_scr_close(void);
void PDC_scr_free(void);
int PDC_scr_open(void);
void PDC_set_keyboard_binary(bool);
void PDC_transform_line(int, int, int, const chtype *);
void PDC_transform_line_sliced(int, int, int, const chtype *);
const char *PDC_sysname(void);
/* Internal cross-module functions */
int PDC_init_atrtab(void);
void PDC_free_atrtab(void);
WINDOW *PDC_makelines(WINDOW *);
WINDOW *PDC_makenew(int, int, int, int);
PDCEX long PDC_millisecs( void);
int PDC_mouse_in_slk(int, int);
void PDC_slk_free(void);
void PDC_slk_initialize(void);
void PDC_sync(WINDOW *);
PDCEX void PDC_set_default_colors( const int, const int);
void PDC_set_changed_cells_range( WINDOW *, const int y, const int start, const int end);
void PDC_mark_line_as_changed( WINDOW *win, const int y);
void PDC_mark_cells_as_changed( WINDOW *, const int y, const int start, const int end);
void PDC_mark_cell_as_changed( WINDOW *, const int y, const int x);
bool PDC_touched_range( const WINDOW *win, const int y, int *firstch, int *lastch);
int PDC_wscrl(WINDOW *win, const int top, const int bottom, int n);
#ifdef PDC_WIDE
int PDC_mbtowc(wchar_t *, const char *, size_t);
size_t PDC_mbstowcs(wchar_t *, const char *, size_t);
size_t PDC_wcstombs(char *, const wchar_t *, size_t);
PDCEX int PDC_wcwidth( const int32_t ucs);
#ifdef USING_COMBINING_CHARACTER_SCHEME
int PDC_expand_combined_characters( const cchar_t c, cchar_t *added);
#endif
#endif
#define MAX_UNICODE 0x110000
#ifdef PDCDEBUG
# define PDC_LOG(x) if (SP && SP->dbfp) PDC_debug x
#else
# define PDC_LOG(x)
#endif
/* Internal macros for attributes */
#ifndef max
# define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
# define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
#define DIVROUND(num, divisor) ((num) + ((divisor) >> 1)) / (divisor)
#define PDC_CLICK_PERIOD 150 /* time to wait for a click, if
not set by mouseinterval() */
#define PDC_MAXCOL 768 /* maximum possible COLORS; may be less */
#define _INBUFSIZ 512 /* size of terminal input buffer */
#define NUNGETCH 256 /* max # chars to ungetch() */
#define MAX_PACKET_LEN 90 /* max # chars to send to PDC_transform_line */
#define OFF_SCREEN_WINDOWS_TO_RIGHT_AND_BOTTOM 1
#define OFF_SCREEN_WINDOWS_TO_LEFT_AND_TOP 2
#define INTENTIONALLY_UNUSED_PARAMETER( param) (void)(param)
#define _is_altcharset( ch) (((ch) & (A_ALTCHARSET | (A_CHARTEXT ^ 0x7f))) == A_ALTCHARSET)
struct _win /* definition of a window */
{
int _cury; /* current pseudo-cursor */
int _curx;
int _maxy; /* max window coordinates */
int _maxx;
int _begy; /* origin on screen */
int _begx;
int _flags; /* window properties */
chtype _attrs; /* standard attributes and colors */
chtype _bkgd; /* background, normally blank */
bool _clear; /* causes clear at next refresh */
bool _leaveit; /* leaves cursor where it is */
bool _scroll; /* allows window scrolling */
bool _nodelay; /* input character wait flag */
bool _immed; /* immediate update flag */
bool _sync; /* synchronise window ancestors */
bool _use_keypad; /* flags keypad key mode active */
chtype **_y; /* pointer to line pointer array */
int *_firstch; /* first changed character in line */
int *_lastch; /* last changed character in line */
int _tmarg; /* top of scrolling region */
int _bmarg; /* bottom of scrolling region */
int _delayms; /* milliseconds of delay for getch() */
int _parx, _pary; /* coords relative to parent (0,0) */
struct _win *_parent; /* subwin's pointer to parent win */
int _pminrow, _pmincol; /* saved position used only for pads */
int _sminrow, _smaxrow; /* saved position used only for pads */
int _smincol, _smaxcol; /* saved position used only for pads */
};
#if PDC_COLOR_BITS < 15
typedef int16_t hash_idx_t;
#else
typedef int32_t hash_idx_t;
#endif
#define MAX_RIPPEDOFFLINES 5
struct _screen
{
bool alive; /* if initscr() called, and not endwin() */
bool autocr; /* if cr -> lf */
bool cbreak; /* if terminal unbuffered */
bool echo; /* if terminal echo */
bool raw_inp; /* raw input mode (v. cooked input) */
bool raw_out; /* raw output mode (7 v. 8 bits) */
bool audible; /* FALSE if the bell is visual */
bool mono; /* TRUE if current screen is mono */
bool resized; /* TRUE if TERM has been resized */
bool orig_attr; /* TRUE if we have the original colors */
short orig_fore; /* original screen foreground color */
short orig_back; /* original screen foreground color */
int cursrow; /* position of physical cursor */
int curscol; /* position of physical cursor */
int visibility; /* visibility of cursor */
int orig_cursor; /* original cursor size */
int lines; /* new value for LINES */
int cols; /* new value for COLS */
mmask_t _trap_mbe; /* trap these mouse button events */
int mouse_wait; /* time to wait (in ms) for a
button release after a press, in
order to count it as a click */
int slklines; /* lines in use by slk_init() */
WINDOW *slk_winptr; /* window for slk */
int linesrippedoff; /* lines ripped off via ripoffline() */
RIPPEDOFFLINE *linesripped;
int delaytenths; /* 1/10ths second to wait block
getch() for */
bool _preserve; /* TRUE if screen background
to be preserved */
int _restore; /* specifies if screen background
to be restored, and how */
unsigned long key_modifiers; /* key modifiers (SHIFT, CONTROL, etc.)
on last key press */
bool return_key_modifiers; /* TRUE if modifier keys are
returned as "real" keys */
bool in_endwin; /* if we're in endwin(), we should use
only signal-safe code */
MOUSE_STATUS mouse_status; /* last returned mouse status */
short line_color; /* color of line attributes - default -1 */
attr_t termattrs; /* attribute capabilities */
WINDOW *lastscr; /* the last screen image */
FILE *dbfp; /* debug trace file pointer */
bool color_started; /* TRUE after start_color() */
bool dirty; /* redraw on napms() after init_color() */
int sel_start; /* start of selection (y * COLS + x) */
int sel_end; /* end of selection */
int *c_buffer; /* character buffer */
int c_pindex; /* putter index */
int c_gindex; /* getter index */
int *c_ungch; /* array of ungotten chars */
int c_ungind; /* ungetch() push index */
int c_ungmax; /* allocated size of ungetch() buffer */
struct _pdc_pair *pairs;
int pairs_allocated;
int first_col;
bool default_colors;
hash_idx_t *pair_hash_tbl;
int pair_hash_tbl_size, pair_hash_tbl_used;
int n_windows, off_screen_windows;
WINDOW **window_list;
unsigned trace_flags;
bool want_trace_fflush;
FILE *output_fd, *input_fd;
};
PDCEX SCREEN *SP; /* curses variables */
#ifdef __cplusplus
}
#endif
#endif /* __CURSES_INTERNALS__ */