xref: /freebsd/contrib/ncurses/include/curses.tail (revision 21817992b3314c908ab50f0bb88d2ee750b9c4ac)
1*21817992SBaptiste Daroussin/* $Id: curses.tail,v 1.27 2023/08/05 19:43:46 tom Exp $ */
24a1a9510SRong-En Fan/*
35ca44d1cSRong-En Fan * vile:cmode:
44a1a9510SRong-En Fan * This file is part of ncurses, designed to be appended after curses.h.in
54a1a9510SRong-En Fan * (see that file for the relevant copyright).
64a1a9510SRong-En Fan */
739f2269fSPeter Wemm
839f2269fSPeter Wemm/* mouse interface */
94a1a9510SRong-En Fan
104a1a9510SRong-En Fan#if NCURSES_MOUSE_VERSION > 1
114a1a9510SRong-En Fan#define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 5))
124a1a9510SRong-En Fan#else
134a1a9510SRong-En Fan#define NCURSES_MOUSE_MASK(b,m) ((m) << (((b) - 1) * 6))
144a1a9510SRong-En Fan#endif
154a1a9510SRong-En Fan
16*21817992SBaptiste Daroussin#define	NCURSES_BUTTON_RELEASED	001UL
17*21817992SBaptiste Daroussin#define	NCURSES_BUTTON_PRESSED	002UL
18*21817992SBaptiste Daroussin#define	NCURSES_BUTTON_CLICKED	004UL
19*21817992SBaptiste Daroussin#define	NCURSES_DOUBLE_CLICKED	010UL
20*21817992SBaptiste Daroussin#define	NCURSES_TRIPLE_CLICKED	020UL
21*21817992SBaptiste Daroussin#define	NCURSES_RESERVED_EVENT	040UL
2239f2269fSPeter Wemm
2339f2269fSPeter Wemm/* event masks */
244a1a9510SRong-En Fan#define	BUTTON1_RELEASED	NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
254a1a9510SRong-En Fan#define	BUTTON1_PRESSED		NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)
264a1a9510SRong-En Fan#define	BUTTON1_CLICKED		NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED)
274a1a9510SRong-En Fan#define	BUTTON1_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED)
284a1a9510SRong-En Fan#define	BUTTON1_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED)
294a1a9510SRong-En Fan
304a1a9510SRong-En Fan#define	BUTTON2_RELEASED	NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_RELEASED)
314a1a9510SRong-En Fan#define	BUTTON2_PRESSED		NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_PRESSED)
324a1a9510SRong-En Fan#define	BUTTON2_CLICKED		NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_CLICKED)
334a1a9510SRong-En Fan#define	BUTTON2_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(2, NCURSES_DOUBLE_CLICKED)
344a1a9510SRong-En Fan#define	BUTTON2_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(2, NCURSES_TRIPLE_CLICKED)
354a1a9510SRong-En Fan
364a1a9510SRong-En Fan#define	BUTTON3_RELEASED	NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_RELEASED)
374a1a9510SRong-En Fan#define	BUTTON3_PRESSED		NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_PRESSED)
384a1a9510SRong-En Fan#define	BUTTON3_CLICKED		NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_CLICKED)
394a1a9510SRong-En Fan#define	BUTTON3_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(3, NCURSES_DOUBLE_CLICKED)
404a1a9510SRong-En Fan#define	BUTTON3_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(3, NCURSES_TRIPLE_CLICKED)
414a1a9510SRong-En Fan
424a1a9510SRong-En Fan#define	BUTTON4_RELEASED	NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_RELEASED)
434a1a9510SRong-En Fan#define	BUTTON4_PRESSED		NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_PRESSED)
444a1a9510SRong-En Fan#define	BUTTON4_CLICKED		NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_CLICKED)
454a1a9510SRong-En Fan#define	BUTTON4_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(4, NCURSES_DOUBLE_CLICKED)
464a1a9510SRong-En Fan#define	BUTTON4_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(4, NCURSES_TRIPLE_CLICKED)
474a1a9510SRong-En Fan
484a1a9510SRong-En Fan/*
494a1a9510SRong-En Fan * In 32 bits the version-1 scheme does not provide enough space for a 5th
504a1a9510SRong-En Fan * button, unless we choose to change the ABI by omitting the reserved-events.
514a1a9510SRong-En Fan */
524a1a9510SRong-En Fan#if NCURSES_MOUSE_VERSION > 1
534a1a9510SRong-En Fan
544a1a9510SRong-En Fan#define	BUTTON5_RELEASED	NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED)
554a1a9510SRong-En Fan#define	BUTTON5_PRESSED		NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED)
564a1a9510SRong-En Fan#define	BUTTON5_CLICKED		NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED)
574a1a9510SRong-En Fan#define	BUTTON5_DOUBLE_CLICKED	NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED)
584a1a9510SRong-En Fan#define	BUTTON5_TRIPLE_CLICKED	NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED)
594a1a9510SRong-En Fan
604a1a9510SRong-En Fan#define	BUTTON_CTRL		NCURSES_MOUSE_MASK(6, 0001L)
614a1a9510SRong-En Fan#define	BUTTON_SHIFT		NCURSES_MOUSE_MASK(6, 0002L)
624a1a9510SRong-En Fan#define	BUTTON_ALT		NCURSES_MOUSE_MASK(6, 0004L)
634a1a9510SRong-En Fan#define	REPORT_MOUSE_POSITION	NCURSES_MOUSE_MASK(6, 0010L)
644a1a9510SRong-En Fan
654a1a9510SRong-En Fan#else
664a1a9510SRong-En Fan
674a1a9510SRong-En Fan#define	BUTTON1_RESERVED_EVENT	NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT)
684a1a9510SRong-En Fan#define	BUTTON2_RESERVED_EVENT	NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT)
694a1a9510SRong-En Fan#define	BUTTON3_RESERVED_EVENT	NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT)
704a1a9510SRong-En Fan#define	BUTTON4_RESERVED_EVENT	NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT)
714a1a9510SRong-En Fan
724a1a9510SRong-En Fan#define	BUTTON_CTRL		NCURSES_MOUSE_MASK(5, 0001L)
734a1a9510SRong-En Fan#define	BUTTON_SHIFT		NCURSES_MOUSE_MASK(5, 0002L)
744a1a9510SRong-En Fan#define	BUTTON_ALT		NCURSES_MOUSE_MASK(5, 0004L)
754a1a9510SRong-En Fan#define	REPORT_MOUSE_POSITION	NCURSES_MOUSE_MASK(5, 0010L)
764a1a9510SRong-En Fan
774a1a9510SRong-En Fan#endif
784a1a9510SRong-En Fan
794a1a9510SRong-En Fan#define	ALL_MOUSE_EVENTS	(REPORT_MOUSE_POSITION - 1)
8039f2269fSPeter Wemm
8139f2269fSPeter Wemm/* macros to extract single event-bits from masks */
825d08fb1fSRong-En Fan#define	BUTTON_RELEASE(e, x)		((e) & NCURSES_MOUSE_MASK(x, 001))
835d08fb1fSRong-En Fan#define	BUTTON_PRESS(e, x)		((e) & NCURSES_MOUSE_MASK(x, 002))
845d08fb1fSRong-En Fan#define	BUTTON_CLICK(e, x)		((e) & NCURSES_MOUSE_MASK(x, 004))
855d08fb1fSRong-En Fan#define	BUTTON_DOUBLE_CLICK(e, x)	((e) & NCURSES_MOUSE_MASK(x, 010))
865d08fb1fSRong-En Fan#define	BUTTON_TRIPLE_CLICK(e, x)	((e) & NCURSES_MOUSE_MASK(x, 020))
875d08fb1fSRong-En Fan#define	BUTTON_RESERVED_EVENT(e, x)	((e) & NCURSES_MOUSE_MASK(x, 040))
8839f2269fSPeter Wemm
8939f2269fSPeter Wemmtypedef struct
9039f2269fSPeter Wemm{
9139f2269fSPeter Wemm    short id;		/* ID to distinguish multiple devices */
9239f2269fSPeter Wemm    int x, y, z;	/* event coordinates (character-cell) */
9339f2269fSPeter Wemm    mmask_t bstate;	/* button state bits */
9439f2269fSPeter Wemm}
9539f2269fSPeter WemmMEVENT;
9639f2269fSPeter Wemm
9706bfebdeSXin LIextern NCURSES_EXPORT(bool)    has_mouse(void);
9839f2269fSPeter Wemmextern NCURSES_EXPORT(int)     getmouse (MEVENT *);
9939f2269fSPeter Wemmextern NCURSES_EXPORT(int)     ungetmouse (MEVENT *);
10039f2269fSPeter Wemmextern NCURSES_EXPORT(mmask_t) mousemask (mmask_t, mmask_t *);
10139f2269fSPeter Wemmextern NCURSES_EXPORT(bool)    wenclose (const WINDOW *, int, int);
10239f2269fSPeter Wemmextern NCURSES_EXPORT(int)     mouseinterval (int);
1034a1a9510SRong-En Fanextern NCURSES_EXPORT(bool)    wmouse_trafo (const WINDOW*, int*, int*, bool);
10439f2269fSPeter Wemmextern NCURSES_EXPORT(bool)    mouse_trafo (int*, int*, bool);              /* generated */
10539f2269fSPeter Wemm
10606bfebdeSXin LI#if NCURSES_SP_FUNCS
10706bfebdeSXin LIextern NCURSES_EXPORT(bool)    NCURSES_SP_NAME(has_mouse) (SCREEN*);
10806bfebdeSXin LIextern NCURSES_EXPORT(int)     NCURSES_SP_NAME(getmouse) (SCREEN*, MEVENT *);
10906bfebdeSXin LIextern NCURSES_EXPORT(int)     NCURSES_SP_NAME(ungetmouse) (SCREEN*,MEVENT *);
11006bfebdeSXin LIextern NCURSES_EXPORT(mmask_t) NCURSES_SP_NAME(mousemask) (SCREEN*, mmask_t, mmask_t *);
11106bfebdeSXin LIextern NCURSES_EXPORT(int)     NCURSES_SP_NAME(mouseinterval) (SCREEN*, int);
11206bfebdeSXin LI#endif
11306bfebdeSXin LI
114aae38d10SBaptiste Daroussin#ifndef NCURSES_NOMACROS
11539f2269fSPeter Wemm#define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
116aae38d10SBaptiste Daroussin#endif
11739f2269fSPeter Wemm
11839f2269fSPeter Wemm/* other non-XSI functions */
11939f2269fSPeter Wemm
12039f2269fSPeter Wemmextern NCURSES_EXPORT(int) mcprint (char *, int);	/* direct data to printer */
12139f2269fSPeter Wemmextern NCURSES_EXPORT(int) has_key (int);		/* do we have given key? */
12239f2269fSPeter Wemm
12306bfebdeSXin LI#if NCURSES_SP_FUNCS
12406bfebdeSXin LIextern NCURSES_EXPORT(int) NCURSES_SP_NAME(has_key) (SCREEN*, int);    /* do we have given key? */
12506bfebdeSXin LIextern NCURSES_EXPORT(int) NCURSES_SP_NAME(mcprint) (SCREEN*, char *, int);	/* direct data to printer */
12606bfebdeSXin LI#endif
12706bfebdeSXin LI
12839f2269fSPeter Wemm/* Debugging : use with libncurses_g.a */
12939f2269fSPeter Wemm
13039f2269fSPeter Wemmextern NCURSES_EXPORT(void) _tracef (const char *, ...) GCC_PRINTFLIKE(1,2);
13139f2269fSPeter Wemmextern NCURSES_EXPORT(char *) _traceattr (attr_t);
13239f2269fSPeter Wemmextern NCURSES_EXPORT(char *) _traceattr2 (int, chtype);
13339f2269fSPeter Wemmextern NCURSES_EXPORT(char *) _tracechar (int);
13439f2269fSPeter Wemmextern NCURSES_EXPORT(char *) _tracechtype (chtype);
13539f2269fSPeter Wemmextern NCURSES_EXPORT(char *) _tracechtype2 (int, chtype);
13673f0a83dSXin LI#if NCURSES_WIDECHAR
13739f2269fSPeter Wemm#define _tracech_t		_tracecchar_t
13839f2269fSPeter Wemmextern NCURSES_EXPORT(char *) _tracecchar_t (const cchar_t *);
13939f2269fSPeter Wemm#define _tracech_t2		_tracecchar_t2
14039f2269fSPeter Wemmextern NCURSES_EXPORT(char *) _tracecchar_t2 (int, const cchar_t *);
14139f2269fSPeter Wemm#else
14239f2269fSPeter Wemm#define _tracech_t		_tracechtype
14339f2269fSPeter Wemm#define _tracech_t2		_tracechtype2
14439f2269fSPeter Wemm#endif
145aae38d10SBaptiste Daroussinextern NCURSES_EXPORT(void) trace (const unsigned) GCC_DEPRECATED("use curses_trace");
146aae38d10SBaptiste Daroussinextern NCURSES_EXPORT(unsigned) curses_trace (const unsigned);
14739f2269fSPeter Wemm
14839f2269fSPeter Wemm/* trace masks */
14939f2269fSPeter Wemm#define TRACE_DISABLE	0x0000	/* turn off tracing */
15039f2269fSPeter Wemm#define TRACE_TIMES	0x0001	/* trace user and system times of updates */
15139f2269fSPeter Wemm#define TRACE_TPUTS	0x0002	/* trace tputs calls */
15239f2269fSPeter Wemm#define TRACE_UPDATE	0x0004	/* trace update actions, old & new screens */
15339f2269fSPeter Wemm#define TRACE_MOVE	0x0008	/* trace cursor moves and scrolls */
15439f2269fSPeter Wemm#define TRACE_CHARPUT	0x0010	/* trace all character outputs */
15539f2269fSPeter Wemm#define TRACE_ORDINARY	0x001F	/* trace all update actions */
15639f2269fSPeter Wemm#define TRACE_CALLS	0x0020	/* trace all curses calls */
15739f2269fSPeter Wemm#define TRACE_VIRTPUT	0x0040	/* trace virtual character puts */
15839f2269fSPeter Wemm#define TRACE_IEVENT	0x0080	/* trace low-level input processing */
15939f2269fSPeter Wemm#define TRACE_BITS	0x0100	/* trace state of TTY control bits */
16039f2269fSPeter Wemm#define TRACE_ICALLS	0x0200	/* trace internal/nested calls */
16139f2269fSPeter Wemm#define TRACE_CCALLS	0x0400	/* trace per-character calls */
16239f2269fSPeter Wemm#define TRACE_DATABASE	0x0800	/* trace read/write of terminfo/termcap data */
16339f2269fSPeter Wemm#define TRACE_ATTRS	0x1000	/* trace attribute updates */
1644a1a9510SRong-En Fan
1654a1a9510SRong-En Fan#define TRACE_SHIFT	13	/* number of bits in the trace masks */
1664a1a9510SRong-En Fan#define TRACE_MAXIMUM	((1 << TRACE_SHIFT) - 1) /* maximum trace level */
16739f2269fSPeter Wemm
16839f2269fSPeter Wemm#if defined(TRACE) || defined(NCURSES_TEST)
16939f2269fSPeter Wemmextern NCURSES_EXPORT_VAR(int) _nc_optimize_enable;		/* enable optimizations */
17039f2269fSPeter Wemmextern NCURSES_EXPORT(const char *) _nc_visbuf (const char *);
17139f2269fSPeter Wemm#define OPTIMIZE_MVCUR		0x01	/* cursor movement optimization */
17239f2269fSPeter Wemm#define OPTIMIZE_HASHMAP	0x02	/* diff hashing to detect scrolls */
17339f2269fSPeter Wemm#define OPTIMIZE_SCROLL		0x04	/* scroll optimization */
17439f2269fSPeter Wemm#define OPTIMIZE_ALL		0xff	/* enable all optimizations (dflt) */
17539f2269fSPeter Wemm#endif
17639f2269fSPeter Wemm
177*21817992SBaptiste Daroussinextern GCC_NORETURN NCURSES_EXPORT(void) exit_curses (int);
178aae38d10SBaptiste Daroussin
17906bfebdeSXin LI#include <unctrl.h>
18006bfebdeSXin LI
18139f2269fSPeter Wemm#ifdef __cplusplus
18239f2269fSPeter Wemm
1834a1a9510SRong-En Fan#ifndef NCURSES_NOMACROS
1844a1a9510SRong-En Fan
18539f2269fSPeter Wemm/* these names conflict with STL */
18639f2269fSPeter Wemm#undef box
18739f2269fSPeter Wemm#undef clear
18839f2269fSPeter Wemm#undef erase
18939f2269fSPeter Wemm#undef move
19039f2269fSPeter Wemm#undef refresh
19139f2269fSPeter Wemm
1924a1a9510SRong-En Fan#endif /* NCURSES_NOMACROS */
1934a1a9510SRong-En Fan
19439f2269fSPeter Wemm}
19539f2269fSPeter Wemm#endif
19639f2269fSPeter Wemm
19739f2269fSPeter Wemm#endif /* __NCURSES_H */
198