/* * getOverrideKey - get next key from the override buffer */ static vi_key getOverrideKey( void ) { int c; bool mouse = FALSE; int mcnt = 0; for( ;; ) { c = overrideKeyBuff[overrideKeyPos]; if( overrideKeyPos == MAX_OVERRIDE_KEY_BUFF - 1 ) { overrideKeyPos = 0; } else { overrideKeyPos++; } if( overrideKeyPos == overrideKeyEnd ) { EditFlags.KeyOverride = FALSE; } if( c == VI_KEY( MOUSEEVENT ) && !mouse ) { mouse = TRUE; mcnt = 0; } else { if( mouse ) { switch( mcnt ) { case 0: LastMouseEvent = c; break; case 1: MouseRow = c; break; case 2: MouseCol = c; break; case 3: MouseStatus = c; mouse = FALSE; c = VI_KEY( MOUSEEVENT ); RedrawMouse( MouseRow, MouseCol ); DisplayMouse( TRUE ); break; } mcnt++; } if( !mouse ) { #ifndef __WIN__ if( c == 3 ) { // ExitWithVerify(); } #endif break; } } } return( c ); } /* getOverrideKey */
/* * getOverrideKey - get next key from the override buffer */ static vi_key getOverrideKey( void ) { vi_key key; bool mouse = false; int mcnt = 0; for( ;; ) { key = overrideKeyBuff[overrideKeyPos]; if( overrideKeyPos == MAX_OVERRIDE_KEY_BUFF - 1 ) { overrideKeyPos = 0; } else { overrideKeyPos++; } if( overrideKeyPos == overrideKeyEnd ) { EditFlags.KeyOverride = false; } if( mouse ) { if( mcnt == 3 ) { MouseStatus = key; mouse = false; key = VI_KEY( MOUSEEVENT ); RedrawMouse( MouseRow, MouseCol ); DisplayMouse( true ); break; } if( mcnt == 0 ) { LastMouseEvent = key; } else if( mcnt == 1 ) { MouseRow = key; } else if( mcnt == 2 ) { MouseCol = key; } mcnt++; } else if( key == VI_KEY( MOUSEEVENT ) ) { mouse = true; mcnt = 0; } else { #ifndef __WIN__ if( key == VI_KEY( CTRL_C ) ) { // ExitWithVerify(); } #endif break; } } return( key ); } /* getOverrideKey */
/* * GetKey - read a key from the keyboard */ vi_key GetKey( bool usemouse ) { bool hit; vi_key key; clearSpin(); for( ;; ) { if( EditFlags.NoCapsLock ) { TurnOffCapsLock(); } LastMouseEvent = GetMouseEvent(); if( LastMouseEvent != VI_MOUSE_NONE ) { RedrawMouse( MouseRow, MouseCol ); DisplayMouse( true ); if( TestMouseEvent( usemouse ) ) { return( VI_KEY( MOUSEEVENT ) ); } } /* * could get set by mouse handler or IDEGetKeys */ if( EditFlags.KeyOverride ) { key = getOverrideKey(); #ifndef __WIN__ if( key == VI_KEY( CTRL_C ) ) { ExitWithVerify(); clearSpin(); continue; } #endif return( key ); } hit = KeyboardHit(); if( !hit ) { DoAutoSave(); #ifdef __IDE__ IDEGetKeys(); #endif #ifdef __QNX__ WaitForProxy(); if( !KeyboardHit() ) { continue; } #endif } #if defined( BUSYWAIT ) else { #endif key = GetKeyboard(); #if defined( __NT__ ) if( key == VI_KEY( MOUSEEVENT ) ) { continue; } #endif DisplayMouse( false ); #ifndef __WIN__ if( EditFlags.EscapedInsertChar ) break; #endif if( key == VI_KEY( NULL ) ) { GetKeyboard(); ExitWithVerify(); clearSpin(); continue; } #ifndef __WIN__ if( key == VI_KEY( CTRL_C ) ) { ExitWithVerify(); clearSpin(); continue; } #endif break; #if defined( BUSYWAIT ) } #endif #if defined( __DOS__ ) DosIdleCall(); #elif defined( __OS2__ ) DosSleep( 1 ); #endif } if( EditFlags.Spinning ) { EditFlags.SpinningOurWheels = true; } return( key ); } /* GetKey */