Send Ctrl signals to child process correctly. We can now use CTRL+C to
close programs in cmd!
Modified: trunk/reactos/subsys/system/cmd/cmd.c
_____
Modified: trunk/reactos/subsys/system/cmd/cmd.c
--- trunk/reactos/subsys/system/cmd/cmd.c 2005-11-05 22:03:47 UTC
(rev 19021)
+++ trunk/reactos/subsys/system/cmd/cmd.c 2005-11-05 22:13:59 UTC
(rev 19022)
@@ -469,11 +469,12 @@
NULL,
NULL,
TRUE,
- CREATE_NEW_PROCESS_GROUP,
+ 0, /*
CREATE_NEW_PROCESS_GROUP */
NULL,
NULL,
&stui,
&prci))
+
{
if (IsConsoleProcess(prci.hProcess))
{
@@ -1295,12 +1296,12 @@
ReadCommand (readline, CMDLINE_LENGTH);
ip = readline;
bEchoThisLine = FALSE;
- bIsBatch = FALSE;
+ bIsBatch = FALSE;
}
- else
- {
- bIsBatch = TRUE;
- }
+ else
+ {
+ bIsBatch = TRUE;
+ }
/* skip leading blanks */
while ( _istspace(*ip) )
@@ -1426,20 +1427,33 @@
BOOL WINAPI BreakHandler (DWORD dwCtrlType)
{
+ static BOOL SelfGenerated = FALSE;
+
if ((dwCtrlType != CTRL_C_EVENT) &&
(dwCtrlType != CTRL_BREAK_EVENT))
+ {
return FALSE;
-
+ }
+ else
+ {
+ if(SelfGenerated)
+ {
+ SelfGenerated = FALSE;
+ return TRUE;
+ }
+ }
+
if (bChildProcessRunning == TRUE)
{
- GenerateConsoleCtrlEvent (CTRL_C_EVENT,
- dwChildProcessId);
+ SelfGenerated = TRUE;
+ GenerateConsoleCtrlEvent (dwCtrlType, 0);
return TRUE;
}
+ bCtrlBreak = TRUE;
/* FIXME: Handle batch files */
- /* FIXME: Print "^C" */
+ //ConOutPrintf(_T("^C"));
return TRUE;