From: Brandon Turner Date: Mon, 5 Dec 2005 02:59:29 +0000 (+0000) Subject: Crtl-C gives a new line when reading input X-Git-Tag: backups/ros-branch-0_2_9@19949~28 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=593d6d0f28c2aa09f47fe7608beafea1b25da7cc Crtl-C gives a new line when reading input svn path=/trunk/; revision=19906 --- diff --git a/reactos/subsys/system/cmd/cmd.c b/reactos/subsys/system/cmd/cmd.c index ec3c065f788..e62a014078a 100644 --- a/reactos/subsys/system/cmd/cmd.c +++ b/reactos/subsys/system/cmd/cmd.c @@ -1449,7 +1449,7 @@ ProcessInput (BOOL bFlag) ConOutPuts (commandline); } - if (*commandline) + if (*commandline && !CheckCtrlBreak(BREAK_INPUT)) { ParseCommandLine (commandline); if (bEcho && !bIgnoreEcho && (!bIsBatch || bEchoThisLine)) @@ -1469,8 +1469,25 @@ ProcessInput (BOOL bFlag) BOOL WINAPI BreakHandler (DWORD dwCtrlType) { + DWORD dwWritten; + INPUT_RECORD rec; static BOOL SelfGenerated = FALSE; - + + rec.EventType = KEY_EVENT; + rec.Event.KeyEvent.bKeyDown = TRUE; + rec.Event.KeyEvent.wRepeatCount = 1; + rec.Event.KeyEvent.wVirtualKeyCode = _T('C'); + rec.Event.KeyEvent.wVirtualScanCode = _T('C') - 35; + rec.Event.KeyEvent.uChar.AsciiChar = _T('C'); + rec.Event.KeyEvent.uChar.UnicodeChar = _T('C'); + rec.Event.KeyEvent.dwControlKeyState = RIGHT_CTRL_PRESSED; + + WriteConsoleInput( + hIn, + &rec, + 1, + &dwWritten); + if ((dwCtrlType != CTRL_C_EVENT) && (dwCtrlType != CTRL_BREAK_EVENT)) { diff --git a/reactos/subsys/system/cmd/cmdinput.c b/reactos/subsys/system/cmd/cmdinput.c index 76c28d80e21..ab7e64943a7 100644 --- a/reactos/subsys/system/cmd/cmdinput.c +++ b/reactos/subsys/system/cmd/cmdinput.c @@ -409,8 +409,9 @@ VOID ReadCommand (LPTSTR str, INT maxlen) #endif break; - + case _T('M'): + case _T('C'): /* ^M does the same as return */ if(!(ir.Event.KeyEvent.dwControlKeyState & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED))) @@ -513,10 +514,12 @@ VOID ReadCommand (LPTSTR str, INT maxlen) } #ifdef _UNICODE ch = ir.Event.KeyEvent.uChar.UnicodeChar; - if ((ch >= 32 && ch <= 255) && (charcount != (maxlen - 2))) + if ((ch >= 32 && ch <= 255) && (charcount != (maxlen - 2)) && + !(ir.Event.KeyEvent.dwControlKeyState & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED))) #else ch = ir.Event.KeyEvent.uChar.AsciiChar; - if ((UCHAR)ch >= 32 && (charcount != (maxlen - 2))) + if ((UCHAR)ch >= 32 && (charcount != (maxlen - 2)) && + !(ir.Event.KeyEvent.dwControlKeyState & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED))) #endif /* _UNICODE */ { /* insert character into string... */