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.
- data/COPYING +22 -0
 - data/Gemfile +5 -0
 - data/Gemfile.lock +13 -0
 - data/History.txt +32 -3
 - data/README.rdoc +118 -58
 - data/Rakefile +30 -0
 - data/examples/acs_chars.rb +53 -0
 - data/examples/acs_chars.rbc +1502 -0
 - data/examples/{example-attributes.rb → attributes.rb} +0 -0
 - data/examples/color.rb +63 -0
 - data/examples/cursor.rb +27 -0
 - data/examples/example.rb +17 -17
 - data/examples/getkey.rb +212 -0
 - data/examples/{example-getsetsyx.rb → getsetsyx.rb} +2 -2
 - data/examples/globals.rb +38 -0
 - data/examples/hello.rb +34 -0
 - data/examples/hello.rbc +638 -0
 - data/examples/hellowide.rb +59 -0
 - data/examples/keys.rb +27 -0
 - data/examples/{example-mouse.rb → mouse.rb} +2 -2
 - data/examples/multiterm.rb +120 -0
 - data/examples/ncurses/LICENSES_for_examples +26 -0
 - data/examples/{ncurses-example.rb → ncurses/example.rb} +13 -80
 - data/examples/ncurses/hello_ncurses.rb +57 -0
 - data/examples/ncurses/rain.rb +220 -0
 - data/examples/ncurses/read_line.rb +67 -0
 - data/examples/ncurses/subwin.rb +71 -0
 - data/examples/ncurses/tclock.rb +227 -0
 - data/examples/newterm.rb +65 -0
 - data/examples/panel_simple.rb +82 -0
 - data/examples/{example-printw-variadic.rb → printw-variadic.rb} +1 -1
 - data/examples/ripoffline.rb +86 -0
 - data/examples/run-all.sh +14 -0
 - data/examples/{example-softkeys.rb → softkeys.rb} +0 -0
 - data/examples/{example-stdscr.rb → stdscr.rb} +2 -1
 - data/examples/temp_leave.rb +99 -0
 - data/examples/viewer.rb +350 -0
 - data/examples/wacs_chars.rb +64 -0
 - data/examples/windows.rb +73 -0
 - data/ffi-ncurses.gemspec +39 -52
 - data/lib/ffi-ncurses.rb +214 -474
 - data/lib/ffi-ncurses/acs.rb +150 -0
 - data/lib/ffi-ncurses/bool_wrappers.rb +66 -0
 - data/lib/ffi-ncurses/functions.rb +450 -0
 - data/lib/ffi-ncurses/keydefs.rb +136 -99
 - data/lib/ffi-ncurses/mouse.rb +106 -106
 - data/lib/ffi-ncurses/ncurses.rb +176 -0
 - data/lib/ffi-ncurses/{ord-shim.rb → ord_shim.rb} +0 -0
 - data/lib/ffi-ncurses/panel.rb +21 -0
 - data/lib/ffi-ncurses/typedefs.rb +35 -0
 - data/lib/ffi-ncurses/version.rb +7 -0
 - data/lib/ffi-ncurses/widechars.rb +137 -0
 - data/lib/ffi-ncurses/winstruct.rb +55 -33
 - data/spec/attached_functions_spec.rb +42 -0
 - metadata +95 -85
 - data/examples/example-colour.rb +0 -63
 - data/examples/example-cursor.rb +0 -22
 - data/examples/example-hello.rb +0 -24
 - data/examples/example-jruby.rb +0 -14
 - data/examples/example-keys.rb +0 -25
 - data/examples/example-windows.rb +0 -24
 
    
        data/lib/ffi-ncurses/keydefs.rb
    CHANGED
    
    | 
         @@ -1,108 +1,145 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding: utf-8; -*-
         
     | 
| 
       1 
2 
     | 
    
         
             
            module FFI
         
     | 
| 
       2 
3 
     | 
    
         
             
              module NCurses
         
     | 
| 
       3 
     | 
    
         
            -
                 
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
                 
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
       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 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                 
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       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 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                   
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       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 
     | 
    
         
            -
             
     | 
| 
      
 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
         
     | 
    
        data/lib/ffi-ncurses/mouse.rb
    CHANGED
    
    | 
         @@ -1,105 +1,104 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'ffi-ncurses'
         
     | 
| 
       2 
1 
     | 
    
         
             
            module FFI
         
     | 
| 
       3 
2 
     | 
    
         
             
              module NCurses
         
     | 
| 
      
 3 
     | 
    
         
            +
                module Mouse
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
                  NCURSES_MOUSE_VERSION = 1
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
                  # mouse interface
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
      
 81 
     | 
    
         
            +
                  end
         
     | 
| 
       82 
82 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
| 
      
 86 
     | 
    
         
            +
                  def BUTTON_RELEASE(e, x)
         
     | 
| 
       88 
87 
     | 
    
         
             
                    ((e) & (001 << (6 * ((x) - 1))))
         
     | 
| 
       89 
88 
     | 
    
         
             
                  end
         
     | 
| 
       90 
     | 
    
         
            -
                  def 
     | 
| 
      
 89 
     | 
    
         
            +
                  def BUTTON_PRESS(e, x)
         
     | 
| 
       91 
90 
     | 
    
         
             
                    ((e) & (002 << (6 * ((x) - 1))))
         
     | 
| 
       92 
91 
     | 
    
         
             
                  end
         
     | 
| 
       93 
     | 
    
         
            -
                  def 
     | 
| 
      
 92 
     | 
    
         
            +
                  def BUTTON_CLICK(e, x)
         
     | 
| 
       94 
93 
     | 
    
         
             
                    ((e) & (004 << (6 * ((x) - 1))))
         
     | 
| 
       95 
94 
     | 
    
         
             
                  end
         
     | 
| 
       96 
     | 
    
         
            -
                  def 
     | 
| 
      
 95 
     | 
    
         
            +
                  def BUTTON_DOUBLE_CLICK(e, x)
         
     | 
| 
       97 
96 
     | 
    
         
             
                    ((e) & (010 << (6 * ((x) - 1))))
         
     | 
| 
       98 
97 
     | 
    
         
             
                  end
         
     | 
| 
       99 
     | 
    
         
            -
                  def 
     | 
| 
      
 98 
     | 
    
         
            +
                  def BUTTON_TRIPLE_CLICK(e, x)
         
     | 
| 
       100 
99 
     | 
    
         
             
                    ((e) & (020 << (6 * ((x) - 1))))
         
     | 
| 
       101 
100 
     | 
    
         
             
                  end
         
     | 
| 
       102 
     | 
    
         
            -
                  def 
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
      
 115 
     | 
    
         
            +
                  #   def mouse_trafo(y, x, to_screen)
         
     | 
| 
      
 116 
     | 
    
         
            +
                  #   end
         
     | 
| 
       119 
117 
     | 
    
         | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
      
 118 
     | 
    
         
            +
                  # already defined in keydefs.rb
         
     | 
| 
      
 119 
     | 
    
         
            +
                  # KEY_MOUSE = 0631 # Mouse event has occurred
         
     | 
| 
       122 
120 
     | 
    
         | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
             
     | 
| 
      
 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
         
     |