1262685Sdelphij/* $Id: curses.tail,v 1.21 2011/10/29 20:03:22 tom Exp $ */
2166124Srafan/*
3174993Srafan * vile:cmode:
4166124Srafan * This file is part of ncurses, designed to be appended after curses.h.in
5166124Srafan * (see that file for the relevant copyright).
6166124Srafan */
797049Speter
897049Speter/* mouse interface */
997049Speter
10166124Srafan#if NCURSES_MOUSE_VERSION > 1
11166124Srafan#define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 5))
12166124Srafan#else
13166124Srafan#define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 6))
14166124Srafan#endif
15166124Srafan
16166124Srafan#define	NCURSES_BUTTON_RELEASED	001L
17166124Srafan#define	NCURSES_BUTTON_PRESSED	002L
18166124Srafan#define	NCURSES_BUTTON_CLICKED	004L
19166124Srafan#define	NCURSES_DOUBLE_CLICKED	010L
20166124Srafan#define	NCURSES_TRIPLE_CLICKED	020L
21166124Srafan#define	NCURSES_RESERVED_EVENT	040L
22166124Srafan
2397049Speter/* event masks */
24166124Srafan#define	BUTTON1_RELEASED	NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
25166124Srafan#define	BUTTON1_PRESSED		NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)
26166124Srafan#define	BUTTON1_CLICKED		NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED)
27166124Srafan#define	BUTTON1_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED)
28166124Srafan#define	BUTTON1_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED)
2997049Speter
30166124Srafan#define	BUTTON2_RELEASED	NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_RELEASED)
31166124Srafan#define	BUTTON2_PRESSED		NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_PRESSED)
32166124Srafan#define	BUTTON2_CLICKED		NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_CLICKED)
33166124Srafan#define	BUTTON2_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(2, NCURSES_DOUBLE_CLICKED)
34166124Srafan#define	BUTTON2_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(2, NCURSES_TRIPLE_CLICKED)
35166124Srafan
36166124Srafan#define	BUTTON3_RELEASED	NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_RELEASED)
37166124Srafan#define	BUTTON3_PRESSED		NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_PRESSED)
38166124Srafan#define	BUTTON3_CLICKED		NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_CLICKED)
39166124Srafan#define	BUTTON3_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(3, NCURSES_DOUBLE_CLICKED)
40166124Srafan#define	BUTTON3_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(3, NCURSES_TRIPLE_CLICKED)
41166124Srafan
42166124Srafan#define	BUTTON4_RELEASED	NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_RELEASED)
43166124Srafan#define	BUTTON4_PRESSED		NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_PRESSED)
44166124Srafan#define	BUTTON4_CLICKED		NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_CLICKED)
45166124Srafan#define	BUTTON4_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(4, NCURSES_DOUBLE_CLICKED)
46166124Srafan#define	BUTTON4_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(4, NCURSES_TRIPLE_CLICKED)
47166124Srafan
48166124Srafan/*
49166124Srafan * In 32 bits the version-1 scheme does not provide enough space for a 5th
50166124Srafan * button, unless we choose to change the ABI by omitting the reserved-events.
51166124Srafan */
52166124Srafan#if NCURSES_MOUSE_VERSION > 1
53166124Srafan
54166124Srafan#define	BUTTON5_RELEASED	NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED)
55166124Srafan#define	BUTTON5_PRESSED		NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED)
56166124Srafan#define	BUTTON5_CLICKED		NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED)
57166124Srafan#define	BUTTON5_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED)
58166124Srafan#define	BUTTON5_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED)
59166124Srafan
60166124Srafan#define	BUTTON_CTRL		NCURSES_MOUSE_MASK(6, 0001L)
61166124Srafan#define	BUTTON_SHIFT		NCURSES_MOUSE_MASK(6, 0002L)
62166124Srafan#define	BUTTON_ALT		NCURSES_MOUSE_MASK(6, 0004L)
63166124Srafan#define	REPORT_MOUSE_POSITION	NCURSES_MOUSE_MASK(6, 0010L)
64166124Srafan
65166124Srafan#else
66166124Srafan
67166124Srafan#define	BUTTON1_RESERVED_EVENT	NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT)
68166124Srafan#define	BUTTON2_RESERVED_EVENT	NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT)
69166124Srafan#define	BUTTON3_RESERVED_EVENT	NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT)
70166124Srafan#define	BUTTON4_RESERVED_EVENT	NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT)
71166124Srafan
72166124Srafan#define	BUTTON_CTRL		NCURSES_MOUSE_MASK(5, 0001L)
73166124Srafan#define	BUTTON_SHIFT		NCURSES_MOUSE_MASK(5, 0002L)
74166124Srafan#define	BUTTON_ALT		NCURSES_MOUSE_MASK(5, 0004L)
75166124Srafan#define	REPORT_MOUSE_POSITION	NCURSES_MOUSE_MASK(5, 0010L)
76166124Srafan
77166124Srafan#endif
78166124Srafan
79166124Srafan#define	ALL_MOUSE_EVENTS	(REPORT_MOUSE_POSITION - 1)
80166124Srafan
8197049Speter/* macros to extract single event-bits from masks */
82184989Srafan#define	BUTTON_RELEASE(e, x)		((e) & NCURSES_MOUSE_MASK(x, 001))
83184989Srafan#define	BUTTON_PRESS(e, x)		((e) & NCURSES_MOUSE_MASK(x, 002))
84184989Srafan#define	BUTTON_CLICK(e, x)		((e) & NCURSES_MOUSE_MASK(x, 004))
85184989Srafan#define	BUTTON_DOUBLE_CLICK(e, x)	((e) & NCURSES_MOUSE_MASK(x, 010))
86184989Srafan#define	BUTTON_TRIPLE_CLICK(e, x)	((e) & NCURSES_MOUSE_MASK(x, 020))
87184989Srafan#define	BUTTON_RESERVED_EVENT(e, x)	((e) & NCURSES_MOUSE_MASK(x, 040))
8897049Speter
8997049Spetertypedef struct
9097049Speter{
9197049Speter    short id;		/* ID to distinguish multiple devices */
9297049Speter    int x, y, z;	/* event coordinates (character-cell) */
9397049Speter    mmask_t bstate;	/* button state bits */
9497049Speter}
9597049SpeterMEVENT;
9697049Speter
97262629Sdelphijextern NCURSES_EXPORT(bool)    has_mouse(void);
98262629Sdelphijextern NCURSES_EXPORT(int)     getmouse (MEVENT *);
99262629Sdelphijextern NCURSES_EXPORT(int)     ungetmouse (MEVENT *);
10097049Speterextern NCURSES_EXPORT(mmask_t) mousemask (mmask_t, mmask_t *);
101262629Sdelphijextern NCURSES_EXPORT(bool)    wenclose (const WINDOW *, int, int);
102262629Sdelphijextern NCURSES_EXPORT(int)     mouseinterval (int);
103262629Sdelphijextern NCURSES_EXPORT(bool)    wmouse_trafo (const WINDOW*, int*, int*, bool);
104262629Sdelphijextern NCURSES_EXPORT(bool)    mouse_trafo (int*, int*, bool);              /* generated */
10597049Speter
106262629Sdelphij#if NCURSES_SP_FUNCS
107262629Sdelphijextern NCURSES_EXPORT(bool)    NCURSES_SP_NAME(has_mouse) (SCREEN*);
108262629Sdelphijextern NCURSES_EXPORT(int)     NCURSES_SP_NAME(getmouse) (SCREEN*, MEVENT *);
109262629Sdelphijextern NCURSES_EXPORT(int)     NCURSES_SP_NAME(ungetmouse) (SCREEN*,MEVENT *);
110262629Sdelphijextern NCURSES_EXPORT(mmask_t) NCURSES_SP_NAME(mousemask) (SCREEN*, mmask_t, mmask_t *);
111262629Sdelphijextern NCURSES_EXPORT(int)     NCURSES_SP_NAME(mouseinterval) (SCREEN*, int);
112262629Sdelphij#endif
113262629Sdelphij
11497049Speter#define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
11597049Speter
11697049Speter/* other non-XSI functions */
11797049Speter
11897049Speterextern NCURSES_EXPORT(int) mcprint (char *, int);	/* direct data to printer */
11997049Speterextern NCURSES_EXPORT(int) has_key (int);		/* do we have given key? */
12097049Speter
121262629Sdelphij#if NCURSES_SP_FUNCS
122262629Sdelphijextern NCURSES_EXPORT(int) NCURSES_SP_NAME(has_key) (SCREEN*, int);    /* do we have given key? */
123262629Sdelphijextern NCURSES_EXPORT(int) NCURSES_SP_NAME(mcprint) (SCREEN*, char *, int);	/* direct data to printer */
124262629Sdelphij#endif
125262629Sdelphij
12697049Speter/* Debugging : use with libncurses_g.a */
12797049Speter
12897049Speterextern NCURSES_EXPORT(void) _tracef (const char *, ...) GCC_PRINTFLIKE(1,2);
12997049Speterextern NCURSES_EXPORT(void) _tracedump (const char *, WINDOW *);
13097049Speterextern NCURSES_EXPORT(char *) _traceattr (attr_t);
13197049Speterextern NCURSES_EXPORT(char *) _traceattr2 (int, chtype);
13297049Speterextern NCURSES_EXPORT(char *) _nc_tracebits (void);
13397049Speterextern NCURSES_EXPORT(char *) _tracechar (int);
13497049Speterextern NCURSES_EXPORT(char *) _tracechtype (chtype);
13597049Speterextern NCURSES_EXPORT(char *) _tracechtype2 (int, chtype);
136262685Sdelphij#if NCURSES_WIDECHAR
13797049Speter#define _tracech_t		_tracecchar_t
13897049Speterextern NCURSES_EXPORT(char *) _tracecchar_t (const cchar_t *);
13997049Speter#define _tracech_t2		_tracecchar_t2
14097049Speterextern NCURSES_EXPORT(char *) _tracecchar_t2 (int, const cchar_t *);
14197049Speter#else
14297049Speter#define _tracech_t		_tracechtype
14397049Speter#define _tracech_t2		_tracechtype2
14497049Speter#endif
14597049Speterextern NCURSES_EXPORT(char *) _tracemouse (const MEVENT *);
14697049Speterextern NCURSES_EXPORT(void) trace (const unsigned int);
14797049Speter
14897049Speter/* trace masks */
14997049Speter#define TRACE_DISABLE	0x0000	/* turn off tracing */
15097049Speter#define TRACE_TIMES	0x0001	/* trace user and system times of updates */
15197049Speter#define TRACE_TPUTS	0x0002	/* trace tputs calls */
15297049Speter#define TRACE_UPDATE	0x0004	/* trace update actions, old & new screens */
15397049Speter#define TRACE_MOVE	0x0008	/* trace cursor moves and scrolls */
15497049Speter#define TRACE_CHARPUT	0x0010	/* trace all character outputs */
15597049Speter#define TRACE_ORDINARY	0x001F	/* trace all update actions */
15697049Speter#define TRACE_CALLS	0x0020	/* trace all curses calls */
15797049Speter#define TRACE_VIRTPUT	0x0040	/* trace virtual character puts */
15897049Speter#define TRACE_IEVENT	0x0080	/* trace low-level input processing */
15997049Speter#define TRACE_BITS	0x0100	/* trace state of TTY control bits */
16097049Speter#define TRACE_ICALLS	0x0200	/* trace internal/nested calls */
16197049Speter#define TRACE_CCALLS	0x0400	/* trace per-character calls */
16297049Speter#define TRACE_DATABASE	0x0800	/* trace read/write of terminfo/termcap data */
16397049Speter#define TRACE_ATTRS	0x1000	/* trace attribute updates */
16497049Speter
165166124Srafan#define TRACE_SHIFT	13	/* number of bits in the trace masks */
166166124Srafan#define TRACE_MAXIMUM	((1 << TRACE_SHIFT) - 1) /* maximum trace level */
167166124Srafan
16897049Speter#if defined(TRACE) || defined(NCURSES_TEST)
16997049Speterextern NCURSES_EXPORT_VAR(int) _nc_optimize_enable;		/* enable optimizations */
17097049Speterextern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
17197049Speter#define OPTIMIZE_MVCUR		0x01	/* cursor movement optimization */
17297049Speter#define OPTIMIZE_HASHMAP	0x02	/* diff hashing to detect scrolls */
17397049Speter#define OPTIMIZE_SCROLL		0x04	/* scroll optimization */
17497049Speter#define OPTIMIZE_ALL		0xff	/* enable all optimizations (dflt) */
17597049Speter#endif
17697049Speter
177262629Sdelphij#include <unctrl.h>
178262629Sdelphij
17997049Speter#ifdef __cplusplus
18097049Speter
181166124Srafan#ifndef NCURSES_NOMACROS
182166124Srafan
18397049Speter/* these names conflict with STL */
18497049Speter#undef box
18597049Speter#undef clear
18697049Speter#undef erase
18797049Speter#undef move
18897049Speter#undef refresh
18997049Speter
190166124Srafan#endif /* NCURSES_NOMACROS */
191166124Srafan
19297049Speter}
19397049Speter#endif
19497049Speter
19597049Speter#endif /* __NCURSES_H */
196