_getch() doesn't echo the chars it retrieves and operates in raw mode.
Modified: trunk/reactos/lib/crt/conio/getch.c
_____
Modified: trunk/reactos/lib/crt/conio/getch.c
--- trunk/reactos/lib/crt/conio/getch.c 2005-09-17 22:00:35 UTC (rev
17903)
+++ trunk/reactos/lib/crt/conio/getch.c 2005-09-17 22:33:53 UTC (rev
17904)
@@ -20,21 +20,41 @@
*/
int _getch(void)
{
- DWORD NumberOfCharsRead = 0;
+ DWORD NumberOfCharsRead = 0;
char c;
+ HANDLE ConsoleHandle;
+ BOOL RestoreMode;
+ DWORD ConsoleMode;
+
if (char_avail) {
c = ungot_char;
char_avail = 0;
} else {
+ /*
+ * _getch() is documented to NOT echo characters. Testing shows
it
+ * doesn't wait for a CR either. So we need to switch off
+ * ENABLE_ECHO_INPUT and ENABLE_LINE_INPUT if they're currently
+ * switched on.
+ */
+ ConsoleHandle = (HANDLE) _get_osfhandle(stdin->_file);
+ RestoreMode = GetConsoleMode(ConsoleHandle, &ConsoleMode) &&
+ (0 != (ConsoleMode &
+ (ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT)));
+ if (RestoreMode) {
+ SetConsoleMode(ConsoleHandle,
+ ConsoleMode & (~ (ENABLE_ECHO_INPUT |
ENABLE_LINE_INPUT)));
+ }
ReadConsoleA((HANDLE)_get_osfhandle(stdin->_file),
&c,
1,
&NumberOfCharsRead,
NULL);
+ if (RestoreMode) {
+ SetConsoleMode(ConsoleHandle, ConsoleMode);
+ }
}
if (c == 10)
c = 13;
- putchar(c);
return c;
}
Show replies by date