blob: 5f911aee7b15e7803b30ca9beb69bd5758e5e5b0 [file] [log] [blame]
Steve Kondikae271bc2015-11-15 02:50:53 +01001/* $Id: curses.tail,v 1.21 2011/10/29 20:03:22 tom Exp $ */
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05302/*
3 * vile:cmode:
4 * This file is part of ncurses, designed to be appended after curses.h.in
5 * (see that file for the relevant copyright).
6 */
7
8/* mouse interface */
9
10#if NCURSES_MOUSE_VERSION > 1
11#define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 5))
12#else
13#define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 6))
14#endif
15
16#define NCURSES_BUTTON_RELEASED 001L
17#define NCURSES_BUTTON_PRESSED 002L
18#define NCURSES_BUTTON_CLICKED 004L
19#define NCURSES_DOUBLE_CLICKED 010L
20#define NCURSES_TRIPLE_CLICKED 020L
21#define NCURSES_RESERVED_EVENT 040L
22
23/* event masks */
24#define BUTTON1_RELEASED NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
25#define BUTTON1_PRESSED NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)
26#define BUTTON1_CLICKED NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED)
27#define BUTTON1_DOUBLE_CLICKED NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED)
28#define BUTTON1_TRIPLE_CLICKED NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED)
29
30#define BUTTON2_RELEASED NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_RELEASED)
31#define BUTTON2_PRESSED NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_PRESSED)
32#define BUTTON2_CLICKED NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_CLICKED)
33#define BUTTON2_DOUBLE_CLICKED NCURSES_MOUSE_MASK(2, NCURSES_DOUBLE_CLICKED)
34#define BUTTON2_TRIPLE_CLICKED NCURSES_MOUSE_MASK(2, NCURSES_TRIPLE_CLICKED)
35
36#define BUTTON3_RELEASED NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_RELEASED)
37#define BUTTON3_PRESSED NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_PRESSED)
38#define BUTTON3_CLICKED NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_CLICKED)
39#define BUTTON3_DOUBLE_CLICKED NCURSES_MOUSE_MASK(3, NCURSES_DOUBLE_CLICKED)
40#define BUTTON3_TRIPLE_CLICKED NCURSES_MOUSE_MASK(3, NCURSES_TRIPLE_CLICKED)
41
42#define BUTTON4_RELEASED NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_RELEASED)
43#define BUTTON4_PRESSED NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_PRESSED)
44#define BUTTON4_CLICKED NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_CLICKED)
45#define BUTTON4_DOUBLE_CLICKED NCURSES_MOUSE_MASK(4, NCURSES_DOUBLE_CLICKED)
46#define BUTTON4_TRIPLE_CLICKED NCURSES_MOUSE_MASK(4, NCURSES_TRIPLE_CLICKED)
47
48/*
49 * In 32 bits the version-1 scheme does not provide enough space for a 5th
50 * button, unless we choose to change the ABI by omitting the reserved-events.
51 */
52#if NCURSES_MOUSE_VERSION > 1
53
54#define BUTTON5_RELEASED NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED)
55#define BUTTON5_PRESSED NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED)
56#define BUTTON5_CLICKED NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED)
57#define BUTTON5_DOUBLE_CLICKED NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED)
58#define BUTTON5_TRIPLE_CLICKED NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED)
59
60#define BUTTON_CTRL NCURSES_MOUSE_MASK(6, 0001L)
61#define BUTTON_SHIFT NCURSES_MOUSE_MASK(6, 0002L)
62#define BUTTON_ALT NCURSES_MOUSE_MASK(6, 0004L)
63#define REPORT_MOUSE_POSITION NCURSES_MOUSE_MASK(6, 0010L)
64
65#else
66
67#define BUTTON1_RESERVED_EVENT NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT)
68#define BUTTON2_RESERVED_EVENT NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT)
69#define BUTTON3_RESERVED_EVENT NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT)
70#define BUTTON4_RESERVED_EVENT NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT)
71
72#define BUTTON_CTRL NCURSES_MOUSE_MASK(5, 0001L)
73#define BUTTON_SHIFT NCURSES_MOUSE_MASK(5, 0002L)
74#define BUTTON_ALT NCURSES_MOUSE_MASK(5, 0004L)
75#define REPORT_MOUSE_POSITION NCURSES_MOUSE_MASK(5, 0010L)
76
77#endif
78
79#define ALL_MOUSE_EVENTS (REPORT_MOUSE_POSITION - 1)
80
81/* macros to extract single event-bits from masks */
82#define BUTTON_RELEASE(e, x) ((e) & NCURSES_MOUSE_MASK(x, 001))
83#define BUTTON_PRESS(e, x) ((e) & NCURSES_MOUSE_MASK(x, 002))
84#define BUTTON_CLICK(e, x) ((e) & NCURSES_MOUSE_MASK(x, 004))
85#define BUTTON_DOUBLE_CLICK(e, x) ((e) & NCURSES_MOUSE_MASK(x, 010))
86#define BUTTON_TRIPLE_CLICK(e, x) ((e) & NCURSES_MOUSE_MASK(x, 020))
87#define BUTTON_RESERVED_EVENT(e, x) ((e) & NCURSES_MOUSE_MASK(x, 040))
88
89typedef struct
90{
91 short id; /* ID to distinguish multiple devices */
92 int x, y, z; /* event coordinates (character-cell) */
93 mmask_t bstate; /* button state bits */
94}
95MEVENT;
96
Steve Kondikae271bc2015-11-15 02:50:53 +010097extern NCURSES_EXPORT(bool) has_mouse(void);
98extern NCURSES_EXPORT(int) getmouse (MEVENT *);
99extern NCURSES_EXPORT(int) ungetmouse (MEVENT *);
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530100extern NCURSES_EXPORT(mmask_t) mousemask (mmask_t, mmask_t *);
Steve Kondikae271bc2015-11-15 02:50:53 +0100101extern NCURSES_EXPORT(bool) wenclose (const WINDOW *, int, int);
102extern NCURSES_EXPORT(int) mouseinterval (int);
103extern NCURSES_EXPORT(bool) wmouse_trafo (const WINDOW*, int*, int*, bool);
104extern NCURSES_EXPORT(bool) mouse_trafo (int*, int*, bool); /* generated */
105
106#if NCURSES_SP_FUNCS
107extern NCURSES_EXPORT(bool) NCURSES_SP_NAME(has_mouse) (SCREEN*);
108extern NCURSES_EXPORT(int) NCURSES_SP_NAME(getmouse) (SCREEN*, MEVENT *);
109extern NCURSES_EXPORT(int) NCURSES_SP_NAME(ungetmouse) (SCREEN*,MEVENT *);
110extern NCURSES_EXPORT(mmask_t) NCURSES_SP_NAME(mousemask) (SCREEN*, mmask_t, mmask_t *);
111extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mouseinterval) (SCREEN*, int);
112#endif
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530113
114#define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
115
116/* other non-XSI functions */
117
118extern NCURSES_EXPORT(int) mcprint (char *, int); /* direct data to printer */
119extern NCURSES_EXPORT(int) has_key (int); /* do we have given key? */
120
Steve Kondikae271bc2015-11-15 02:50:53 +0100121#if NCURSES_SP_FUNCS
122extern NCURSES_EXPORT(int) NCURSES_SP_NAME(has_key) (SCREEN*, int); /* do we have given key? */
123extern NCURSES_EXPORT(int) NCURSES_SP_NAME(mcprint) (SCREEN*, char *, int); /* direct data to printer */
124#endif
125
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530126/* Debugging : use with libncurses_g.a */
127
128extern NCURSES_EXPORT(void) _tracef (const char *, ...) GCC_PRINTFLIKE(1,2);
129extern NCURSES_EXPORT(void) _tracedump (const char *, WINDOW *);
130extern NCURSES_EXPORT(char *) _traceattr (attr_t);
131extern NCURSES_EXPORT(char *) _traceattr2 (int, chtype);
132extern NCURSES_EXPORT(char *) _nc_tracebits (void);
133extern NCURSES_EXPORT(char *) _tracechar (int);
134extern NCURSES_EXPORT(char *) _tracechtype (chtype);
135extern NCURSES_EXPORT(char *) _tracechtype2 (int, chtype);
Steve Kondikae271bc2015-11-15 02:50:53 +0100136#if NCURSES_WIDECHAR
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530137#define _tracech_t _tracecchar_t
138extern NCURSES_EXPORT(char *) _tracecchar_t (const cchar_t *);
139#define _tracech_t2 _tracecchar_t2
140extern NCURSES_EXPORT(char *) _tracecchar_t2 (int, const cchar_t *);
141#else
142#define _tracech_t _tracechtype
143#define _tracech_t2 _tracechtype2
144#endif
145extern NCURSES_EXPORT(char *) _tracemouse (const MEVENT *);
146extern NCURSES_EXPORT(void) trace (const unsigned int);
147
148/* trace masks */
149#define TRACE_DISABLE 0x0000 /* turn off tracing */
150#define TRACE_TIMES 0x0001 /* trace user and system times of updates */
151#define TRACE_TPUTS 0x0002 /* trace tputs calls */
152#define TRACE_UPDATE 0x0004 /* trace update actions, old & new screens */
153#define TRACE_MOVE 0x0008 /* trace cursor moves and scrolls */
154#define TRACE_CHARPUT 0x0010 /* trace all character outputs */
155#define TRACE_ORDINARY 0x001F /* trace all update actions */
156#define TRACE_CALLS 0x0020 /* trace all curses calls */
157#define TRACE_VIRTPUT 0x0040 /* trace virtual character puts */
158#define TRACE_IEVENT 0x0080 /* trace low-level input processing */
159#define TRACE_BITS 0x0100 /* trace state of TTY control bits */
160#define TRACE_ICALLS 0x0200 /* trace internal/nested calls */
161#define TRACE_CCALLS 0x0400 /* trace per-character calls */
162#define TRACE_DATABASE 0x0800 /* trace read/write of terminfo/termcap data */
163#define TRACE_ATTRS 0x1000 /* trace attribute updates */
164
165#define TRACE_SHIFT 13 /* number of bits in the trace masks */
166#define TRACE_MAXIMUM ((1 << TRACE_SHIFT) - 1) /* maximum trace level */
167
168#if defined(TRACE) || defined(NCURSES_TEST)
169extern NCURSES_EXPORT_VAR(int) _nc_optimize_enable; /* enable optimizations */
170extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
171#define OPTIMIZE_MVCUR 0x01 /* cursor movement optimization */
172#define OPTIMIZE_HASHMAP 0x02 /* diff hashing to detect scrolls */
173#define OPTIMIZE_SCROLL 0x04 /* scroll optimization */
174#define OPTIMIZE_ALL 0xff /* enable all optimizations (dflt) */
175#endif
176
Steve Kondikae271bc2015-11-15 02:50:53 +0100177#include <unctrl.h>
178
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530179#ifdef __cplusplus
180
181#ifndef NCURSES_NOMACROS
182
183/* these names conflict with STL */
184#undef box
185#undef clear
186#undef erase
187#undef move
188#undef refresh
189
190#endif /* NCURSES_NOMACROS */
191
192}
193#endif
194
195#endif /* __NCURSES_H */