Crtl-C gives a new line when reading input
authorBrandon Turner <turnerb7@msu.edu>
Mon, 5 Dec 2005 02:59:29 +0000 (02:59 +0000)
committerBrandon Turner <turnerb7@msu.edu>
Mon, 5 Dec 2005 02:59:29 +0000 (02:59 +0000)
svn path=/trunk/; revision=19906

reactos/subsys/system/cmd/cmd.c
reactos/subsys/system/cmd/cmdinput.c

index ec3c065..e62a014 100644 (file)
@@ -1449,7 +1449,7 @@ ProcessInput (BOOL bFlag)
                        ConOutPuts (commandline);
                }
 
                        ConOutPuts (commandline);
                }
 
-               if (*commandline)
+               if (*commandline && !CheckCtrlBreak(BREAK_INPUT))
                {
                        ParseCommandLine (commandline);
                        if (bEcho && !bIgnoreEcho && (!bIsBatch || bEchoThisLine))
                {
                        ParseCommandLine (commandline);
                        if (bEcho && !bIgnoreEcho && (!bIsBatch || bEchoThisLine))
@@ -1469,8 +1469,25 @@ ProcessInput (BOOL bFlag)
 BOOL WINAPI BreakHandler (DWORD dwCtrlType)
 {
 
 BOOL WINAPI BreakHandler (DWORD dwCtrlType)
 {
 
+       DWORD                   dwWritten;
+       INPUT_RECORD    rec;
        static BOOL SelfGenerated = FALSE;
        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))
        {
        if ((dwCtrlType != CTRL_C_EVENT) &&
            (dwCtrlType != CTRL_BREAK_EVENT))
        {
index 76c28d8..ab7e649 100644 (file)
@@ -409,8 +409,9 @@ VOID ReadCommand (LPTSTR str, INT maxlen)
 
 #endif
                                break;
 
 #endif
                                break;
-
+            
             case _T('M'):
             case _T('M'):
+            case _T('C'):
                 /* ^M does the same as return */
                 if(!(ir.Event.KeyEvent.dwControlKeyState &
                    (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED)))
                 /* ^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;
                        }
 #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;
 #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... */
 #endif /* _UNICODE */
             {
                 /* insert character into string... */