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;