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