ffi-ncurses 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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