From 356d1c6ab05219801e9bf3c04515152f11b1e816 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Mon, 10 Jul 2000 15:30:04 +0000 Subject: [PATCH] * Makefile.in (install): Install textmode.o as well as binmode.o. --- winsup/cygwin/ChangeLog | 4 ++++ winsup/cygwin/Makefile.in | 2 +- winsup/cygwin/fhandler_console.cc | 27 +++++++++++++++------------ 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 04f3ffdb1..c688249e3 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,7 @@ +Mon Jul 10 11:28:57 2000 Christopher Faylor + + * Makefile.in (install): Install textmode.o as well as binmode.o. + Sun Jul 9 21:52:00 2000 Corinna Vinschen * spawn.cc (spawn_guts): Close handle `hToken' only if it's not diff --git a/winsup/cygwin/Makefile.in b/winsup/cygwin/Makefile.in index 683dff1f4..10f3067c5 100644 --- a/winsup/cygwin/Makefile.in +++ b/winsup/cygwin/Makefile.in @@ -153,7 +153,7 @@ force: install: all $(install_host) $(install_target) $(INSTALL_DATA) new-$(DLL_NAME) $(bindir)/$(DLL_NAME); \ - for i in $(LIB_NAME) $(GMON_START) $(LIBGMON_A) binmode.o ; do \ + for i in $(LIB_NAME) $(GMON_START) $(LIBGMON_A) binmode.o textmode.o ; do \ $(INSTALL_DATA) $$i $(tooldir)/lib/$$i ; \ done ; \ cd $(srcdir); \ diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc index 7b19f3cc1..ee95f855b 100644 --- a/winsup/cygwin/fhandler_console.cc +++ b/winsup/cygwin/fhandler_console.cc @@ -128,6 +128,7 @@ fhandler_console::read (void *pv, size_t buflen) HANDLE w4[2]; DWORD nwait; + char tmp[17]; w4[0] = h; if (iscygthread ()) @@ -155,11 +156,12 @@ fhandler_console::read (void *pv, size_t buflen) __seterrno (); return -1; } + DWORD nread; INPUT_RECORD input_rec; const char *toadd; - if (!ReadConsoleInput (h, &input_rec, 1, &nread)) + if (!ReadConsoleInputW (h, &input_rec, 1, &nread)) { syscall_printf ("ReadConsoleInput failed, %E"); __seterrno (); @@ -167,6 +169,7 @@ fhandler_console::read (void *pv, size_t buflen) } #define ich (input_rec.Event.KeyEvent.uChar.AsciiChar) +#define wch (input_rec.Event.KeyEvent.uChar.UnicodeChar) /* check if we're just disposing of this one */ @@ -179,7 +182,7 @@ fhandler_console::read (void *pv, size_t buflen) !input_rec.Event.KeyEvent.bKeyDown) continue; - if (ich == 0 || + if (wch == 0 || /* arrow/function keys */ (input_rec.Event.KeyEvent.dwControlKeyState & ENHANCED_KEY)) { @@ -188,18 +191,18 @@ fhandler_console::read (void *pv, size_t buflen) continue; nread = strlen (toadd); } - else if (!(input_rec.Event.KeyEvent.dwControlKeyState & LEFT_ALT_PRESSED)) - { - OemToCharBuff (&ich, &ich, 1); - toadd = &ich; - } else { - static char tmp[2]; - tmp[0] = '\033'; - tmp[1] = tolower (ich); - toadd = tmp; - nread = 2; + nread = WideCharToMultiByte (CP_ACP, 0, &wch, 1, tmp + 1, sizeof (tmp) - 1, NULL, NULL); + if (!(input_rec.Event.KeyEvent.dwControlKeyState & LEFT_ALT_PRESSED)) + toadd = tmp + 1; + else + { + tmp[0] = '\033'; + tmp[1] = tolower (tmp[1]); + toadd = tmp; + nread++; + } } if (line_edit (toadd, nread))