Index: fhandler.h =================================================================== RCS file: /cvs/src/src/winsup/cygwin/fhandler.h,v retrieving revision 1.40 diff -u -r1.40 fhandler.h --- fhandler.h 2001/01/17 14:57:09 1.40 +++ fhandler.h 2001/02/16 14:16:02 @@ -597,6 +597,8 @@ int nargs_; DWORD default_color; + BOOL use_mouse; + BOOL raw_win32_keyboard_mode_p; /* Output calls */ @@ -608,6 +610,7 @@ void cursor_rel (int, int); const unsigned char * write_normal (unsigned const char*, unsigned const char *); void char_command (char, bool); + BOOL set_raw_win32_keyboard_mode (BOOL); int output_tcsetattr (int a, const struct termios *t); /* Input calls */ Index: fhandler_console.cc =================================================================== RCS file: /cvs/src/src/winsup/cygwin/fhandler_console.cc,v retrieving revision 1.37 diff -u -r1.37 fhandler_console.cc --- fhandler_console.cc 2001/02/14 22:00:09 1.37 +++ fhandler_console.cc 2001/02/16 14:16:04 @@ -48,8 +48,6 @@ const char * get_nonascii_key (INPUT_RECORD&, char *); -static BOOL use_mouse = FALSE; - static tty_min NO_COPY *shared_console_info = NULL; /* Allocate and initialize the shared record for the current console. @@ -116,6 +114,15 @@ return 1; } +BOOL +fhandler_console::set_raw_win32_keyboard_mode (BOOL new_mode) +{ + BOOL old_mode = raw_win32_keyboard_mode_p; + raw_win32_keyboard_mode_p = new_mode; + syscall_printf ("raw keyboard mode %sabled", raw_win32_keyboard_mode_p ? "en" : "dis"); + return old_mode; +}; + void fhandler_console::set_cursor_maybe () { @@ -153,7 +160,7 @@ HANDLE w4[2]; DWORD nwait; - char tmp[17]; + char tmp[60]; w4[0] = h; if (iscygthread ()) @@ -198,6 +205,35 @@ switch (input_rec.EventType) { case KEY_EVENT: +#define virtual_key_code (input_rec.Event.KeyEvent.wVirtualKeyCode) +#define control_key_state (input_rec.Event.KeyEvent.dwControlKeyState) + +#ifdef DEBUGGING + /* allow manual switching to/from raw mode via ctrl-alt-scrolllock */ + if (input_rec.Event.KeyEvent.bKeyDown && + virtual_key_code == VK_SCROLL && + control_key_state & (LEFT_ALT_PRESSED | LEFT_CTRL_PRESSED) == LEFT_ALT_PRESSED | LEFT_CTRL_PRESSED + ) + { + set_raw_win32_keyboard_mode ( !raw_win32_keyboard_mode_p ); + continue; + } +#endif + + if (raw_win32_keyboard_mode_p) + { + __small_sprintf(tmp, "\033{%u;%u;%u;%u;%u;%luK", + input_rec.Event.KeyEvent.bKeyDown, + input_rec.Event.KeyEvent.wRepeatCount, + input_rec.Event.KeyEvent.wVirtualKeyCode, + input_rec.Event.KeyEvent.wVirtualScanCode, + input_rec.Event.KeyEvent.uChar.UnicodeChar, + input_rec.Event.KeyEvent.dwControlKeyState ); + toadd = tmp; + nread = strlen (toadd); + break; + } + if (!input_rec.Event.KeyEvent.bKeyDown) continue; @@ -720,6 +756,8 @@ { set_cb (sizeof *this); state_ = normal; + use_mouse = FALSE; + raw_win32_keyboard_mode_p = FALSE; set_need_fork_fixup (); } @@ -1000,6 +1038,9 @@ syscall_printf("mouse support %sabled", use_mouse ? "en" : "dis"); break; + case 2000: /* Raw keyboard mode */ + set_raw_win32_keyboard_mode ( (c == 'h') ? TRUE : FALSE ); + default: /* Ignore */ syscall_printf("unknown h/l command: %d", args_[0]); break;