From b40ae04e560f88d42d4a227c6f1109bfe2c60f8a Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Thu, 28 Sep 2000 06:39:43 +0000 Subject: [PATCH] * cygkeycheck.cc: New file. Utility to retrieve keycodes. * Makefile.in: Add cygkeycheck to the dependencies. --- winsup/utils/ChangeLog | 5 ++ winsup/utils/Makefile.in | 2 +- winsup/utils/cygkeycheck.cc | 105 ++++++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 winsup/utils/cygkeycheck.cc diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog index 6ec8c5b1b..a066ac312 100644 --- a/winsup/utils/ChangeLog +++ b/winsup/utils/ChangeLog @@ -1,3 +1,8 @@ +Wed Sep 27 16:24:00 2000 Corinna Vinschen + + * cygkeycheck.cc: New file. Utility to retrieve keycodes. + * Makefile.in: Add cygkeycheck to the dependencies. + 2000-09-15 Joerg Schaible * cygpath.cc: Add new options: -s and -i. diff --git a/winsup/utils/Makefile.in b/winsup/utils/Makefile.in index 2ba532626..6aaa8986a 100644 --- a/winsup/utils/Makefile.in +++ b/winsup/utils/Makefile.in @@ -70,7 +70,7 @@ DUMPER_LDFLAGS:=$(ALL_LDFLAGS) $(DUMPER_LIB) PROGS:=mount$(EXEEXT) umount$(EXEEXT) ps$(EXEEXT) kill$(EXEEXT) \ mkpasswd$(EXEEXT) mkgroup$(EXEEXT) cygpath$(EXEEXT) cygcheck$(EXEEXT) \ passwd$(EXEEXT) getfacl$(EXEEXT) setfacl$(EXEEXT) strace$(EXEEXT) \ - regtool$(EXEEXT) + regtool$(EXEEXT) cygkeycheck$(EXEEXT) CLEAN_PROGS:=$(PROGS) ifdef build_dumper diff --git a/winsup/utils/cygkeycheck.cc b/winsup/utils/cygkeycheck.cc new file mode 100644 index 000000000..627f6c95c --- /dev/null +++ b/winsup/utils/cygkeycheck.cc @@ -0,0 +1,105 @@ +/* cygkeycheck.cc + + Copyright 2000 Cygnus Solutions. + + This file is part of Cygwin. + + This software is a copyrighted work licensed under the terms of the + Cygwin license. Please consult the file "CYGWIN_LICENSE" for + details. */ + +#include +#include + +char *myname; + +int +eprint (const char *name) +{ + fprintf (stderr, "%s: %s failed: %lu\n", myname, name, GetLastError ()); + return 1; +} + +int +main (int argc, char **argv) +{ + myname = argv[0]; + + HANDLE h = CreateFileA ("CONIN$", GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if (h == INVALID_HANDLE_VALUE || h == NULL) + return eprint ("Opening CONIN$"); + + DWORD mode; + + if (!GetConsoleMode (h, &mode)) + eprint ("GetConsoleMode"); + else + { + mode &= ~ENABLE_PROCESSED_INPUT; + if (!SetConsoleMode (h, mode)) + eprint ("GetConsoleMode"); + } + + fputs ("\nThis key checker works only in a console window,", stderr); + fputs (" _NOT_ in a terminal session!\n", stderr); + fputs ("Abort with Ctrl+C if in a terminal session.\n\n", stderr); + fputs ("Press `q' to exit.\n", stderr); + + INPUT_RECORD in, prev_in; + + // Drop first key + ReadConsoleInput (h, &in, 1, &mode); + + memset (&in, 0, sizeof in); + + do + { + prev_in = in; + if (!ReadConsoleInput (h, &in, 1, &mode)) + eprint ("ReadConsoleInput"); + + if (!memcmp (&in, &prev_in, sizeof in)) + continue; + + switch (in.EventType) + { + case KEY_EVENT: + printf ("%s %ux VK: 0x%02x VS: 0x%02x A: 0x%02x CTRL: ", + in.Event.KeyEvent.bKeyDown ? "Pressed " : "Released", + in.Event.KeyEvent.wRepeatCount, + in.Event.KeyEvent.wVirtualKeyCode, + in.Event.KeyEvent.wVirtualScanCode, + (unsigned char) in.Event.KeyEvent.uChar.AsciiChar); + fputs (in.Event.KeyEvent.dwControlKeyState & CAPSLOCK_ON ? + "CL " : "-- ", stdout); + fputs (in.Event.KeyEvent.dwControlKeyState & ENHANCED_KEY ? + "EK " : "-- ", stdout); + fputs (in.Event.KeyEvent.dwControlKeyState & LEFT_ALT_PRESSED ? + "LA " : "-- ", stdout); + fputs (in.Event.KeyEvent.dwControlKeyState & LEFT_CTRL_PRESSED ? + "LC " : "-- ", stdout); + fputs (in.Event.KeyEvent.dwControlKeyState & NUMLOCK_ON ? + "NL " : "-- ", stdout); + fputs (in.Event.KeyEvent.dwControlKeyState & RIGHT_ALT_PRESSED ? + "RA " : "-- ", stdout); + fputs (in.Event.KeyEvent.dwControlKeyState & RIGHT_CTRL_PRESSED ? + "RC " : "-- ", stdout); + fputs (in.Event.KeyEvent.dwControlKeyState & SCROLLLOCK_ON ? + "SL " : "-- ", stdout); + fputs (in.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED ? + "SH " : "-- ", stdout); + fputc ('\n', stdout); + break; + + } + } + while (in.EventType != KEY_EVENT || + in.Event.KeyEvent.bKeyDown != FALSE || + in.Event.KeyEvent.uChar.AsciiChar != 'q'); + + CloseHandle (h); + return 0; +}