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;