Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 1 | /* $Id: curses.tail,v 1.16 2008/07/05 20:20:38 tom Exp $ */ |
| 2 | /* |
| 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 | |
| 89 | typedef 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 | } |
| 95 | MEVENT; |
| 96 | |
| 97 | extern NCURSES_EXPORT(int) getmouse (MEVENT *); |
| 98 | extern NCURSES_EXPORT(int) ungetmouse (MEVENT *); |
| 99 | extern NCURSES_EXPORT(mmask_t) mousemask (mmask_t, mmask_t *); |
| 100 | extern NCURSES_EXPORT(bool) wenclose (const WINDOW *, int, int); |
| 101 | extern NCURSES_EXPORT(int) mouseinterval (int); |
| 102 | extern NCURSES_EXPORT(bool) wmouse_trafo (const WINDOW*, int*, int*, bool); |
| 103 | extern NCURSES_EXPORT(bool) mouse_trafo (int*, int*, bool); /* generated */ |
| 104 | |
| 105 | #define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen) |
| 106 | |
| 107 | /* other non-XSI functions */ |
| 108 | |
| 109 | extern NCURSES_EXPORT(int) mcprint (char *, int); /* direct data to printer */ |
| 110 | extern NCURSES_EXPORT(int) has_key (int); /* do we have given key? */ |
| 111 | |
| 112 | /* Debugging : use with libncurses_g.a */ |
| 113 | |
| 114 | extern NCURSES_EXPORT(void) _tracef (const char *, ...) GCC_PRINTFLIKE(1,2); |
| 115 | extern NCURSES_EXPORT(void) _tracedump (const char *, WINDOW *); |
| 116 | extern NCURSES_EXPORT(char *) _traceattr (attr_t); |
| 117 | extern NCURSES_EXPORT(char *) _traceattr2 (int, chtype); |
| 118 | extern NCURSES_EXPORT(char *) _nc_tracebits (void); |
| 119 | extern NCURSES_EXPORT(char *) _tracechar (int); |
| 120 | extern NCURSES_EXPORT(char *) _tracechtype (chtype); |
| 121 | extern NCURSES_EXPORT(char *) _tracechtype2 (int, chtype); |
| 122 | #ifdef _XOPEN_SOURCE_EXTENDED |
| 123 | #define _tracech_t _tracecchar_t |
| 124 | extern NCURSES_EXPORT(char *) _tracecchar_t (const cchar_t *); |
| 125 | #define _tracech_t2 _tracecchar_t2 |
| 126 | extern NCURSES_EXPORT(char *) _tracecchar_t2 (int, const cchar_t *); |
| 127 | #else |
| 128 | #define _tracech_t _tracechtype |
| 129 | #define _tracech_t2 _tracechtype2 |
| 130 | #endif |
| 131 | extern NCURSES_EXPORT(char *) _tracemouse (const MEVENT *); |
| 132 | extern NCURSES_EXPORT(void) trace (const unsigned int); |
| 133 | |
| 134 | /* trace masks */ |
| 135 | #define TRACE_DISABLE 0x0000 /* turn off tracing */ |
| 136 | #define TRACE_TIMES 0x0001 /* trace user and system times of updates */ |
| 137 | #define TRACE_TPUTS 0x0002 /* trace tputs calls */ |
| 138 | #define TRACE_UPDATE 0x0004 /* trace update actions, old & new screens */ |
| 139 | #define TRACE_MOVE 0x0008 /* trace cursor moves and scrolls */ |
| 140 | #define TRACE_CHARPUT 0x0010 /* trace all character outputs */ |
| 141 | #define TRACE_ORDINARY 0x001F /* trace all update actions */ |
| 142 | #define TRACE_CALLS 0x0020 /* trace all curses calls */ |
| 143 | #define TRACE_VIRTPUT 0x0040 /* trace virtual character puts */ |
| 144 | #define TRACE_IEVENT 0x0080 /* trace low-level input processing */ |
| 145 | #define TRACE_BITS 0x0100 /* trace state of TTY control bits */ |
| 146 | #define TRACE_ICALLS 0x0200 /* trace internal/nested calls */ |
| 147 | #define TRACE_CCALLS 0x0400 /* trace per-character calls */ |
| 148 | #define TRACE_DATABASE 0x0800 /* trace read/write of terminfo/termcap data */ |
| 149 | #define TRACE_ATTRS 0x1000 /* trace attribute updates */ |
| 150 | |
| 151 | #define TRACE_SHIFT 13 /* number of bits in the trace masks */ |
| 152 | #define TRACE_MAXIMUM ((1 << TRACE_SHIFT) - 1) /* maximum trace level */ |
| 153 | |
| 154 | #if defined(TRACE) || defined(NCURSES_TEST) |
| 155 | extern NCURSES_EXPORT_VAR(int) _nc_optimize_enable; /* enable optimizations */ |
| 156 | extern NCURSES_EXPORT(const char *) _nc_visbuf (const char *); |
| 157 | #define OPTIMIZE_MVCUR 0x01 /* cursor movement optimization */ |
| 158 | #define OPTIMIZE_HASHMAP 0x02 /* diff hashing to detect scrolls */ |
| 159 | #define OPTIMIZE_SCROLL 0x04 /* scroll optimization */ |
| 160 | #define OPTIMIZE_ALL 0xff /* enable all optimizations (dflt) */ |
| 161 | #endif |
| 162 | |
| 163 | #ifdef __cplusplus |
| 164 | |
| 165 | #ifndef NCURSES_NOMACROS |
| 166 | |
| 167 | /* these names conflict with STL */ |
| 168 | #undef box |
| 169 | #undef clear |
| 170 | #undef erase |
| 171 | #undef move |
| 172 | #undef refresh |
| 173 | |
| 174 | #endif /* NCURSES_NOMACROS */ |
| 175 | |
| 176 | } |
| 177 | #endif |
| 178 | |
| 179 | #endif /* __NCURSES_H */ |