EVENT intern getanyevent( void ) { INPUT_RECORD ir; DWORD rd,ss; WORD vk; EVENT ascii; BOOL has_alt, has_shift, has_ctrl; map *ev,what; EVENT evnt; for( ;; ) { PeekConsoleInput( InputHandle, &ir, 1, &rd ); if( rd == 0 ) return( EV_NO_EVENT ); ReadConsoleInput( InputHandle, &ir, 1, &rd ); if( eventWeWant( &ir ) ) { if( ir.EventType != MOUSE_EVENT ) break; evnt = mouseevent(); if( evnt > EV_NO_EVENT ) return( evnt ); } } vk = ir.Event.KeyEvent.wVirtualKeyCode; ascii = ir.Event.KeyEvent.uChar.AsciiChar; ss = ir.Event.KeyEvent.dwControlKeyState; has_shift = ss & SHIFT_PRESSED; has_ctrl = ss & (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED); has_alt = ss & (RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED); setshiftstate( has_shift, has_ctrl, has_alt ); what.vk = vk; ev = bsearch( &what, events, sizeof( events )/sizeof( map ), sizeof( what ), CompareEvents ); if( ev != NULL ) { if( has_shift ) { ascii = ev->shift; } else if( has_ctrl ) { ascii = ev->ctrl; } else if( has_alt ) { ascii = ev->alt; } else { ascii = ev->reg; } } else if( ascii == 0 ) { ascii = EV_NO_EVENT; } if( ascii > EV_NO_EVENT ) { uihidemouse(); } return( ascii ); } /* getanyevent */
EVENT td_event( void ) { EVENT ev; ev = td_sizeevent(); if( ev > EV_NO_EVENT ) return( ev ); /* In a terminal environment we have to go for the keyboard first, since that's how the mouse events are coming in */ ev = tk_keyboardevent(); if( ev > EV_NO_EVENT ) { uihidemouse(); return( ev ); } return( mouseevent() ); }
EVENT cd_event( void ) { EVENT ev; ev = cd_sizeevent(); if( ev > EV_NO_EVENT ) return( ev ); ev = mouseevent(); if( ev > EV_NO_EVENT ) return( ev ); ev = ck_keyboardevent(); if( ev == EV_NO_EVENT ) return( ev ); uihidemouse(); return( ev ); }
void intern mousespawnstart( void ) { uihidemouse(); }