BOOL bExit = FALSE; /* indicates EXIT was typed */
BOOL bCanExit = TRUE; /* indicates if this shell is exitable */
-BOOL bCtrlBreak = FALSE; /* Ctrl-Break or Ctrl-C hit */
+volatile BOOL bCtrlBreak = FALSE; /* Ctrl-Break or Ctrl-C hit */
BOOL bIgnoreEcho = FALSE; /* Set this to TRUE to prevent a newline, when executing a command */
static BOOL bWaitForCommand = FALSE; /* When we are executing something passed on the commandline after /c or /k */
INT nErrorLevel = 0; /* Errorlevel of last launched external program */
ConOutChar(_T('\n'));
return FALSE;
}
+
+ if (readline[0] == L'\0')
+ {
+ return FALSE;
+ }
+
ip = readline;
}
else
LeaveCriticalSection(&ChildProcessRunningLock);
}
+ bCtrlBreak = TRUE;
+
rec.EventType = KEY_EVENT;
rec.Event.KeyEvent.bKeyDown = TRUE;
rec.Event.KeyEvent.wRepeatCount = 1;
1,
&dwWritten);
- bCtrlBreak = TRUE;
/* FIXME: Handle batch files */
//ConOutPrintf(_T("^C"));
extern LPTSTR lpOriginalEnvironment;
extern WORD wColor;
extern WORD wDefColor;
-extern BOOL bCtrlBreak;
+extern volatile BOOL bCtrlBreak;
extern BOOL bIgnoreEcho;
extern BOOL bExit;
extern BOOL bDisableBatchEcho;
break;
case _T('C'):
- bCharInput = TRUE;
- if (!(ir.Event.KeyEvent.dwControlKeyState &
+ if ((ir.Event.KeyEvent.dwControlKeyState &
(RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED)))
{
- break;
+ /* A CTRL-C. Don't clear the the command line,
+ * but return an empty string in str. */
+ str[0] = L'\0';
+ curx = orgx;
+ cury = orgy;
+ current = charcount = 0;
+ bReturn = TRUE;
}
+ else
+ {
+ /* Just a normal 'C' character */
+ bCharInput = TRUE;
+ }
+ break;
case VK_RETURN:
/* end input, return to main */