ffi-ncurses 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. data/COPYING +22 -0
  2. data/Gemfile +5 -0
  3. data/Gemfile.lock +13 -0
  4. data/History.txt +32 -3
  5. data/README.rdoc +118 -58
  6. data/Rakefile +30 -0
  7. data/examples/acs_chars.rb +53 -0
  8. data/examples/acs_chars.rbc +1502 -0
  9. data/examples/{example-attributes.rb → attributes.rb} +0 -0
  10. data/examples/color.rb +63 -0
  11. data/examples/cursor.rb +27 -0
  12. data/examples/example.rb +17 -17
  13. data/examples/getkey.rb +212 -0
  14. data/examples/{example-getsetsyx.rb → getsetsyx.rb} +2 -2
  15. data/examples/globals.rb +38 -0
  16. data/examples/hello.rb +34 -0
  17. data/examples/hello.rbc +638 -0
  18. data/examples/hellowide.rb +59 -0
  19. data/examples/keys.rb +27 -0
  20. data/examples/{example-mouse.rb → mouse.rb} +2 -2
  21. data/examples/multiterm.rb +120 -0
  22. data/examples/ncurses/LICENSES_for_examples +26 -0
  23. data/examples/{ncurses-example.rb → ncurses/example.rb} +13 -80
  24. data/examples/ncurses/hello_ncurses.rb +57 -0
  25. data/examples/ncurses/rain.rb +220 -0
  26. data/examples/ncurses/read_line.rb +67 -0
  27. data/examples/ncurses/subwin.rb +71 -0
  28. data/examples/ncurses/tclock.rb +227 -0
  29. data/examples/newterm.rb +65 -0
  30. data/examples/panel_simple.rb +82 -0
  31. data/examples/{example-printw-variadic.rb → printw-variadic.rb} +1 -1
  32. data/examples/ripoffline.rb +86 -0
  33. data/examples/run-all.sh +14 -0
  34. data/examples/{example-softkeys.rb → softkeys.rb} +0 -0
  35. data/examples/{example-stdscr.rb → stdscr.rb} +2 -1
  36. data/examples/temp_leave.rb +99 -0
  37. data/examples/viewer.rb +350 -0
  38. data/examples/wacs_chars.rb +64 -0
  39. data/examples/windows.rb +73 -0
  40. data/ffi-ncurses.gemspec +39 -52
  41. data/lib/ffi-ncurses.rb +214 -474
  42. data/lib/ffi-ncurses/acs.rb +150 -0
  43. data/lib/ffi-ncurses/bool_wrappers.rb +66 -0
  44. data/lib/ffi-ncurses/functions.rb +450 -0
  45. data/lib/ffi-ncurses/keydefs.rb +136 -99
  46. data/lib/ffi-ncurses/mouse.rb +106 -106
  47. data/lib/ffi-ncurses/ncurses.rb +176 -0
  48. data/lib/ffi-ncurses/{ord-shim.rb → ord_shim.rb} +0 -0
  49. data/lib/ffi-ncurses/panel.rb +21 -0
  50. data/lib/ffi-ncurses/typedefs.rb +35 -0
  51. data/lib/ffi-ncurses/version.rb +7 -0
  52. data/lib/ffi-ncurses/widechars.rb +137 -0
  53. data/lib/ffi-ncurses/winstruct.rb +55 -33
  54. data/spec/attached_functions_spec.rb +42 -0
  55. metadata +95 -85
  56. data/examples/example-colour.rb +0 -63
  57. data/examples/example-cursor.rb +0 -22
  58. data/examples/example-hello.rb +0 -24
  59. data/examples/example-jruby.rb +0 -14
  60. data/examples/example-keys.rb +0 -25
  61. data/examples/example-windows.rb +0 -24
@@ -1,108 +1,145 @@
1
+ # -*- coding: utf-8; -*-
1
2
  module FFI
2
3
  module NCurses
3
- KEY_CODE_YES = 0400 # A wchar_t contains a key code
4
- KEY_MIN = 0401 # Minimum curses key
5
- KEY_BREAK = 0401 # Break key (unreliable)
6
- KEY_SRESET = 0530 # Soft (partial) reset (unreliable)
7
- KEY_RESET = 0531 # Reset or hard reset (unreliable)
4
+ module KeyDefs
5
+ KEY_TAB = 9
6
+ KEY_RETURN = 10
7
+ KEY_ESCAPE = 27
8
8
 
9
- KEY_DOWN = 0402 # down-arrow key
10
- KEY_UP = 0403 # up-arrow key
11
- KEY_LEFT = 0404 # left-arrow key
12
- KEY_RIGHT = 0405 # right-arrow key
13
- KEY_HOME = 0406 # home key
14
- KEY_BACKSPACE = 0407 # backspace key
15
- KEY_F0 = 0410 # Function keys. Space for 64
9
+ # Note: these are octal numbers.
10
+ KEY_CODE_YES = 0400 # A wchar_t contains a key code
11
+ KEY_MIN = 0401 # Minimum curses key
12
+ KEY_BREAK = 0401 # Break key (unreliable)
13
+ KEY_SRESET = 0530 # Soft (partial) reset (unreliable)
14
+ KEY_RESET = 0531 # Reset or hard reset (unreliable)
16
15
 
17
- # Value of function key n
18
- def KEY_F(n)
19
- (KEY_F0+(n))
20
- end
16
+ KEY_DOWN = 0402 # down-arrow key
17
+ KEY_UP = 0403 # up-arrow key
18
+ KEY_LEFT = 0404 # left-arrow key
19
+ KEY_RIGHT = 0405 # right-arrow key
20
+ KEY_HOME = 0406 # home key
21
+ KEY_BACKSPACE = 0407 # backspace key
22
+ KEY_F0 = 0410 # Function keys. Space for 64
23
+
24
+ KEY_DL = 0510 # delete-line key
25
+ KEY_IL = 0511 # insert-line key
26
+ KEY_DC = 0512 # delete-character key
27
+ KEY_IC = 0513 # insert-character key
28
+ KEY_EIC = 0514 # sent by rmir or smir in insert mode
29
+ KEY_CLEAR = 0515 # clear-screen or erase key
30
+ KEY_EOS = 0516 # clear-to-end-of-screen key
31
+ KEY_EOL = 0517 # clear-to-end-of-line key
32
+ KEY_SF = 0520 # scroll-forward key
33
+ KEY_SR = 0521 # scroll-backward key
34
+ KEY_NPAGE = 0522 # next-page key
35
+ KEY_PPAGE = 0523 # previous-page key
36
+ KEY_STAB = 0524 # set-tab key
37
+ KEY_CTAB = 0525 # clear-tab key
38
+ KEY_CATAB = 0526 # clear-all-tabs key
39
+ KEY_ENTER = 0527 # enter/send key
40
+ KEY_PRINT = 0532 # print key
41
+ KEY_LL = 0533 # lower-left key (home down)
42
+ KEY_A1 = 0534 # upper left of keypad
43
+ KEY_A3 = 0535 # upper right of keypad
44
+ KEY_B2 = 0536 # center of keypad
45
+ KEY_C1 = 0537 # lower left of keypad
46
+ KEY_C3 = 0540 # lower right of keypad
47
+ KEY_BTAB = 0541 # back-tab key
48
+ KEY_BEG = 0542 # begin key
49
+ KEY_CANCEL = 0543 # cancel key
50
+ KEY_CLOSE = 0544 # close key
51
+ KEY_COMMAND = 0545 # command key
52
+ KEY_COPY = 0546 # copy key
53
+ KEY_CREATE = 0547 # create key
54
+ KEY_END = 0550 # end key
55
+ KEY_EXIT = 0551 # exit key
56
+ KEY_FIND = 0552 # find key
57
+ KEY_HELP = 0553 # help key
58
+ KEY_MARK = 0554 # mark key
59
+ KEY_MESSAGE = 0555 # message key
60
+ KEY_MOVE = 0556 # move key
61
+ KEY_NEXT = 0557 # next key
62
+ KEY_OPEN = 0560 # open key
63
+ KEY_OPTIONS = 0561 # options key
64
+ KEY_PREVIOUS = 0562 # previous key
65
+ KEY_REDO = 0563 # redo key
66
+ KEY_REFERENCE = 0564 # reference key
67
+ KEY_REFRESH = 0565 # refresh key
68
+ KEY_REPLACE = 0566 # replace key
69
+ KEY_RESTART = 0567 # restart key
70
+ KEY_RESUME = 0570 # resume key
71
+ KEY_SAVE = 0571 # save key
72
+ KEY_SBEG = 0572 # shifted begin key
73
+ KEY_SCANCEL = 0573 # shifted cancel key
74
+ KEY_SCOMMAND = 0574 # shifted command key
75
+ KEY_SCOPY = 0575 # shifted copy key
76
+ KEY_SCREATE = 0576 # shifted create key
77
+ KEY_SDC = 0577 # shifted delete-character key
78
+ KEY_SDL = 0600 # shifted delete-line key
79
+ KEY_SELECT = 0601 # select key
80
+ KEY_SEND = 0602 # shifted end key
81
+ KEY_SEOL = 0603 # shifted clear-to-end-of-line key
82
+ KEY_SEXIT = 0604 # shifted exit key
83
+ KEY_SFIND = 0605 # shifted find key
84
+ KEY_SHELP = 0606 # shifted help key
85
+ KEY_SHOME = 0607 # shifted home key
86
+ KEY_SIC = 0610 # shifted insert-character key
87
+ KEY_SLEFT = 0611 # shifted left-arrow key
88
+ KEY_SMESSAGE = 0612 # shifted message key
89
+ KEY_SMOVE = 0613 # shifted move key
90
+ KEY_SNEXT = 0614 # shifted next key
91
+ KEY_SOPTIONS = 0615 # shifted options key
92
+ KEY_SPREVIOUS = 0616 # shifted previous key
93
+ KEY_SPRINT = 0617 # shifted print key
94
+ KEY_SREDO = 0620 # shifted redo key
95
+ KEY_SREPLACE = 0621 # shifted replace key
96
+ KEY_SRIGHT = 0622 # shifted right-arrow key
97
+ KEY_SRSUME = 0623 # shifted resume key
98
+ KEY_SSAVE = 0624 # shifted save key
99
+ KEY_SSUSPEND = 0625 # shifted suspend key
100
+ KEY_SUNDO = 0626 # shifted undo key
101
+ KEY_SUSPEND = 0627 # suspend key
102
+ KEY_UNDO = 0630 # undo key
103
+ KEY_MOUSE = 0631 # Mouse event has occurred
104
+ KEY_RESIZE = 0632 # Terminal resize event
105
+ KEY_EVENT = 0633 # We were interrupted by an event
106
+
107
+ KEY_MAX = 0777 # Maximum key value is 0633 [SOH: sic in ncurses.h]
21
108
 
22
- KEY_DL = 0510 # delete-line key
23
- KEY_IL = 0511 # insert-line key
24
- KEY_DC = 0512 # delete-character key
25
- KEY_IC = 0513 # insert-character key
26
- KEY_EIC = 0514 # sent by rmir or smir in insert mode
27
- KEY_CLEAR = 0515 # clear-screen or erase key
28
- KEY_EOS = 0516 # clear-to-end-of-screen key
29
- KEY_EOL = 0517 # clear-to-end-of-line key
30
- KEY_SF = 0520 # scroll-forward key
31
- KEY_SR = 0521 # scroll-backward key
32
- KEY_NPAGE = 0522 # next-page key
33
- KEY_PPAGE = 0523 # previous-page key
34
- KEY_STAB = 0524 # set-tab key
35
- KEY_CTAB = 0525 # clear-tab key
36
- KEY_CATAB = 0526 # clear-all-tabs key
37
- KEY_ENTER = 0527 # enter/send key
38
- KEY_PRINT = 0532 # print key
39
- KEY_LL = 0533 # lower-left key (home down)
40
- KEY_A1 = 0534 # upper left of keypad
41
- KEY_A3 = 0535 # upper right of keypad
42
- KEY_B2 = 0536 # center of keypad
43
- KEY_C1 = 0537 # lower left of keypad
44
- KEY_C3 = 0540 # lower right of keypad
45
- KEY_BTAB = 0541 # back-tab key
46
- KEY_BEG = 0542 # begin key
47
- KEY_CANCEL = 0543 # cancel key
48
- KEY_CLOSE = 0544 # close key
49
- KEY_COMMAND = 0545 # command key
50
- KEY_COPY = 0546 # copy key
51
- KEY_CREATE = 0547 # create key
52
- KEY_END = 0550 # end key
53
- KEY_EXIT = 0551 # exit key
54
- KEY_FIND = 0552 # find key
55
- KEY_HELP = 0553 # help key
56
- KEY_MARK = 0554 # mark key
57
- KEY_MESSAGE = 0555 # message key
58
- KEY_MOVE = 0556 # move key
59
- KEY_NEXT = 0557 # next key
60
- KEY_OPEN = 0560 # open key
61
- KEY_OPTIONS = 0561 # options key
62
- KEY_PREVIOUS = 0562 # previous key
63
- KEY_REDO = 0563 # redo key
64
- KEY_REFERENCE = 0564 # reference key
65
- KEY_REFRESH = 0565 # refresh key
66
- KEY_REPLACE = 0566 # replace key
67
- KEY_RESTART = 0567 # restart key
68
- KEY_RESUME = 0570 # resume key
69
- KEY_SAVE = 0571 # save key
70
- KEY_SBEG = 0572 # shifted begin key
71
- KEY_SCANCEL = 0573 # shifted cancel key
72
- KEY_SCOMMAND = 0574 # shifted command key
73
- KEY_SCOPY = 0575 # shifted copy key
74
- KEY_SCREATE = 0576 # shifted create key
75
- KEY_SDC = 0577 # shifted delete-character key
76
- KEY_SDL = 0600 # shifted delete-line key
77
- KEY_SELECT = 0601 # select key
78
- KEY_SEND = 0602 # shifted end key
79
- KEY_SEOL = 0603 # shifted clear-to-end-of-line key
80
- KEY_SEXIT = 0604 # shifted exit key
81
- KEY_SFIND = 0605 # shifted find key
82
- KEY_SHELP = 0606 # shifted help key
83
- KEY_SHOME = 0607 # shifted home key
84
- KEY_SIC = 0610 # shifted insert-character key
85
- KEY_SLEFT = 0611 # shifted left-arrow key
86
- KEY_SMESSAGE = 0612 # shifted message key
87
- KEY_SMOVE = 0613 # shifted move key
88
- KEY_SNEXT = 0614 # shifted next key
89
- KEY_SOPTIONS = 0615 # shifted options key
90
- KEY_SPREVIOUS = 0616 # shifted previous key
91
- KEY_SPRINT = 0617 # shifted print key
92
- KEY_SREDO = 0620 # shifted redo key
93
- KEY_SREPLACE = 0621 # shifted replace key
94
- KEY_SRIGHT = 0622 # shifted right-arrow key
95
- KEY_SRSUME = 0623 # shifted resume key
96
- KEY_SSAVE = 0624 # shifted save key
97
- KEY_SSUSPEND = 0625 # shifted suspend key
98
- KEY_SUNDO = 0626 # shifted undo key
99
- KEY_SUSPEND = 0627 # suspend key
100
- KEY_UNDO = 0630 # undo key
101
- KEY_MOUSE = 0631 # Mouse event has occurred
102
- KEY_RESIZE = 0632 # Terminal resize event
103
- KEY_EVENT = 0633 # We were interrupted by an event
109
+ module KeyHelper
110
+ # Ctrl + letter
111
+ if ?A == "A"
112
+ # 1.9+
113
+ def KEY_CTRL(letter)
114
+ (letter.ord & ~0b0100000) - ?A.ord + 1
115
+ end
116
+ else
117
+ # 1.8.x
118
+ def KEY_CTRL(letter)
119
+ (letter[0] & ~0b0100000) - ?A + 1
120
+ end
121
+ end
104
122
 
105
- KEY_MAX = 0777 # Maximum key value is 0633 [SOH: sic in ncurses.h]
123
+ # Value of function key n
124
+ def KEY_F(n)
125
+ KEY_F0 + n
126
+ end
127
+ end
128
+ include KeyHelper
129
+ extend KeyHelper
106
130
 
131
+ # For convenience
132
+
133
+ # Control keys
134
+ ('A'..'Z').each do |c|
135
+ const_set "KEY_CTRL_#{c}", KEY_CTRL(c)
136
+ end
137
+
138
+ # Function keys
139
+ (1..64).each do |c|
140
+ const_set "KEY_F#{c}", KEY_F(c)
141
+ end
142
+ end
143
+ include KeyDefs
107
144
  end
108
145
  end
@@ -1,105 +1,104 @@
1
- require 'ffi-ncurses'
2
1
  module FFI
3
2
  module NCurses
3
+ module Mouse
4
4
 
5
- NCURSES_MOUSE_VERSION = 1
5
+ NCURSES_MOUSE_VERSION = 1
6
6
 
7
- # mouse interface
7
+ # mouse interface
8
8
 
9
- if NCURSES_MOUSE_VERSION > 1
10
- def self.NCURSES_MOUSE_MASK(b,m)
11
- ((m) << (((b) - 1) * 5))
9
+ if NCURSES_MOUSE_VERSION > 1
10
+ def self.NCURSES_MOUSE_MASK(b,m)
11
+ ((m) << (((b) - 1) * 5))
12
+ end
13
+ else
14
+ def self.NCURSES_MOUSE_MASK(b,m)
15
+ ((m) << (((b) - 1) * 6))
16
+ end
12
17
  end
13
- else
14
- def self.NCURSES_MOUSE_MASK(b,m)
15
- ((m) << (((b) - 1) * 6))
16
- end
17
- end
18
18
 
19
- NCURSES_BUTTON_RELEASED = 001
20
- NCURSES_BUTTON_PRESSED = 002
21
- NCURSES_BUTTON_CLICKED = 004
22
- NCURSES_DOUBLE_CLICKED = 010
23
- NCURSES_TRIPLE_CLICKED = 020
24
- NCURSES_RESERVED_EVENT = 040
25
-
26
- # event masks
27
- BUTTON1_RELEASED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
28
- BUTTON1_PRESSED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)
29
- BUTTON1_CLICKED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED)
30
- BUTTON1_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED)
31
- BUTTON1_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED)
32
-
33
- BUTTON2_RELEASED = NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_RELEASED)
34
- BUTTON2_PRESSED = NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_PRESSED)
35
- BUTTON2_CLICKED = NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_CLICKED)
36
- BUTTON2_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(2, NCURSES_DOUBLE_CLICKED)
37
- BUTTON2_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(2, NCURSES_TRIPLE_CLICKED)
38
-
39
- BUTTON3_RELEASED = NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_RELEASED)
40
- BUTTON3_PRESSED = NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_PRESSED)
41
- BUTTON3_CLICKED = NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_CLICKED)
42
- BUTTON3_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(3, NCURSES_DOUBLE_CLICKED)
43
- BUTTON3_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(3, NCURSES_TRIPLE_CLICKED)
44
-
45
- BUTTON4_RELEASED = NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_RELEASED)
46
- BUTTON4_PRESSED = NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_PRESSED)
47
- BUTTON4_CLICKED = NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_CLICKED)
48
- BUTTON4_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(4, NCURSES_DOUBLE_CLICKED)
49
- BUTTON4_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(4, NCURSES_TRIPLE_CLICKED)
50
-
51
- #
52
- # In 32 bits the version-1 scheme does not provide enough space for a 5th
53
- # button, unless we choose to change the ABI by omitting the reserved-events.
54
- #
55
-
56
- if NCURSES_MOUSE_VERSION > 1
57
-
58
- BUTTON5_RELEASED = NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED)
59
- BUTTON5_PRESSED = NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED)
60
- BUTTON5_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED)
61
- BUTTON5_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED)
62
- BUTTON5_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED)
63
-
64
- BUTTON_CTRL = NCURSES_MOUSE_MASK(6, 0001)
65
- BUTTON_SHIFT = NCURSES_MOUSE_MASK(6, 0002)
66
- BUTTON_ALT = NCURSES_MOUSE_MASK(6, 0004)
67
- REPORT_MOUSE_POSITION = NCURSES_MOUSE_MASK(6, 0010)
68
-
69
- else
70
-
71
- BUTTON1_RESERVED_EVENT = NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT)
72
- BUTTON2_RESERVED_EVENT = NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT)
73
- BUTTON3_RESERVED_EVENT = NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT)
74
- BUTTON4_RESERVED_EVENT = NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT)
75
-
76
- BUTTON_CTRL = NCURSES_MOUSE_MASK(5, 0001)
77
- BUTTON_SHIFT = NCURSES_MOUSE_MASK(5, 0002)
78
- BUTTON_ALT = NCURSES_MOUSE_MASK(5, 0004)
79
- REPORT_MOUSE_POSITION = NCURSES_MOUSE_MASK(5, 0010)
19
+ NCURSES_BUTTON_RELEASED = 001
20
+ NCURSES_BUTTON_PRESSED = 002
21
+ NCURSES_BUTTON_CLICKED = 004
22
+ NCURSES_DOUBLE_CLICKED = 010
23
+ NCURSES_TRIPLE_CLICKED = 020
24
+ NCURSES_RESERVED_EVENT = 040
25
+
26
+ # event masks
27
+ BUTTON1_RELEASED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
28
+ BUTTON1_PRESSED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)
29
+ BUTTON1_CLICKED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED)
30
+ BUTTON1_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED)
31
+ BUTTON1_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED)
32
+
33
+ BUTTON2_RELEASED = NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_RELEASED)
34
+ BUTTON2_PRESSED = NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_PRESSED)
35
+ BUTTON2_CLICKED = NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_CLICKED)
36
+ BUTTON2_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(2, NCURSES_DOUBLE_CLICKED)
37
+ BUTTON2_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(2, NCURSES_TRIPLE_CLICKED)
38
+
39
+ BUTTON3_RELEASED = NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_RELEASED)
40
+ BUTTON3_PRESSED = NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_PRESSED)
41
+ BUTTON3_CLICKED = NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_CLICKED)
42
+ BUTTON3_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(3, NCURSES_DOUBLE_CLICKED)
43
+ BUTTON3_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(3, NCURSES_TRIPLE_CLICKED)
44
+
45
+ BUTTON4_RELEASED = NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_RELEASED)
46
+ BUTTON4_PRESSED = NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_PRESSED)
47
+ BUTTON4_CLICKED = NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_CLICKED)
48
+ BUTTON4_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(4, NCURSES_DOUBLE_CLICKED)
49
+ BUTTON4_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(4, NCURSES_TRIPLE_CLICKED)
50
+
51
+ #
52
+ # In 32 bits the version-1 scheme does not provide enough space for a 5th
53
+ # button, unless we choose to change the ABI by omitting the reserved-events.
54
+ #
55
+
56
+ if NCURSES_MOUSE_VERSION > 1
57
+
58
+ BUTTON5_RELEASED = NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED)
59
+ BUTTON5_PRESSED = NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED)
60
+ BUTTON5_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED)
61
+ BUTTON5_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED)
62
+ BUTTON5_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED)
63
+
64
+ BUTTON_CTRL = NCURSES_MOUSE_MASK(6, 0001)
65
+ BUTTON_SHIFT = NCURSES_MOUSE_MASK(6, 0002)
66
+ BUTTON_ALT = NCURSES_MOUSE_MASK(6, 0004)
67
+ REPORT_MOUSE_POSITION = NCURSES_MOUSE_MASK(6, 0010)
68
+
69
+ else
70
+
71
+ BUTTON1_RESERVED_EVENT = NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT)
72
+ BUTTON2_RESERVED_EVENT = NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT)
73
+ BUTTON3_RESERVED_EVENT = NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT)
74
+ BUTTON4_RESERVED_EVENT = NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT)
75
+
76
+ BUTTON_CTRL = NCURSES_MOUSE_MASK(5, 0001)
77
+ BUTTON_SHIFT = NCURSES_MOUSE_MASK(5, 0002)
78
+ BUTTON_ALT = NCURSES_MOUSE_MASK(5, 0004)
79
+ REPORT_MOUSE_POSITION = NCURSES_MOUSE_MASK(5, 0010)
80
80
 
81
- end
81
+ end
82
82
 
83
- ALL_MOUSE_EVENTS = (REPORT_MOUSE_POSITION - 1)
83
+ ALL_MOUSE_EVENTS = (REPORT_MOUSE_POSITION - 1)
84
84
 
85
- class << self
86
85
  # macros to extract single event-bits from masks
87
- def BUTTON_RELEASE(e, x)
86
+ def BUTTON_RELEASE(e, x)
88
87
  ((e) & (001 << (6 * ((x) - 1))))
89
88
  end
90
- def BUTTON_PRESS(e, x)
89
+ def BUTTON_PRESS(e, x)
91
90
  ((e) & (002 << (6 * ((x) - 1))))
92
91
  end
93
- def BUTTON_CLICK(e, x)
92
+ def BUTTON_CLICK(e, x)
94
93
  ((e) & (004 << (6 * ((x) - 1))))
95
94
  end
96
- def BUTTON_DOUBLE_CLICK(e, x)
95
+ def BUTTON_DOUBLE_CLICK(e, x)
97
96
  ((e) & (010 << (6 * ((x) - 1))))
98
97
  end
99
- def BUTTON_TRIPLE_CLICK(e, x)
98
+ def BUTTON_TRIPLE_CLICK(e, x)
100
99
  ((e) & (020 << (6 * ((x) - 1))))
101
100
  end
102
- def BUTTON_RESERVED_EVENT(e, x)
101
+ def BUTTON_RESERVED_EVENT(e, x)
103
102
  ((e) & (040 << (6 * ((x) - 1))))
104
103
  end
105
104
 
@@ -112,36 +111,37 @@ module FFI
112
111
  # ((m) << (((b) - 1) * 6))
113
112
  # end
114
113
  # end
115
- end
116
114
 
117
- # def mouse_trafo(y, x, to_screen)
118
- # end
115
+ # def mouse_trafo(y, x, to_screen)
116
+ # end
119
117
 
120
- # already defined in keydefs.rb
121
- # KEY_MOUSE = 0631 # Mouse event has occurred
118
+ # already defined in keydefs.rb
119
+ # KEY_MOUSE = 0631 # Mouse event has occurred
122
120
 
123
- #FFI.add_typedef :ulong, :mmask_t
124
- class MEVENT < FFI::Struct
125
- layout :id, :short,
126
- :x, :int,
127
- :y, :int,
128
- :z, :int,
129
- # :bstate, :mmask_t
130
- :bstate, :ulong
131
- end
121
+ #FFI.add_typedef :ulong, :mmask_t
122
+ class MEVENT < FFI::Struct
123
+ layout :id, :short,
124
+ :x, :int,
125
+ :y, :int,
126
+ :z, :int,
127
+ # :bstate, :mmask_t
128
+ :bstate, :ulong
129
+ end
132
130
 
133
- functions =
134
- [
135
- [:getmouse, [MEVENT], :int],
136
- [:ungetmouse, [MEVENT], :int],
137
- ]
138
-
139
- functions.each do |function|
140
- begin
141
- attach_function(*function)
142
- rescue Object => e
143
- (@unattached_functions ||= []) << function
131
+ functions =
132
+ [
133
+ [:getmouse, [MEVENT], :int],
134
+ [:ungetmouse, [MEVENT], :int],
135
+ ]
136
+
137
+ functions.each do |function|
138
+ begin
139
+ attach_function(*function)
140
+ rescue Object => e
141
+ (@unattached_functions ||= []) << function
142
+ end
144
143
  end
145
144
  end
145
+ include Mouse
146
146
  end
147
147
  end