#endif
/*
- * is character a delimeter when used on first word?
+ * convert
*
+ * insert commas into a number
*/
+INT
+ConvertULargeInteger (ULARGE_INTEGER num, LPTSTR des, INT len, BOOL bPutSeperator)
+{
+ TCHAR temp[32];
+ INT c = 0;
+ INT n = 0;
+
+ if (num.QuadPart == 0)
+ {
+ des[0] = _T('0');
+ des[1] = _T('\0');
+ n = 1;
+ }
+ else
+ {
+ temp[31] = 0;
+ while (num.QuadPart > 0)
+ {
+ if ((((c + 1) % (nNumberGroups + 1)) == 0) && (bPutSeperator))
+ temp[30 - c++] = cThousandSeparator;
+ temp[30 - c++] = (TCHAR)(num.QuadPart % 10) + _T('0');
+ num.QuadPart /= 10;
+ }
+
+ for (n = 0; n <= c; n++)
+ des[n] = temp[31 - c + n];
+ }
+ return n;
+}
+
+/*
+ * is character a delimeter when used on first word?
+ *
+ */
static BOOL IsDelimiter (TCHAR c)
{
return (c == _T('/') || c == _T('=') || c == _T('\0') || _istspace (c));
}
*/
- /* Skip over whitespace to rest of line */
- while (_istspace (*rest))
+ /* Skip over whitespace to rest of line, exclude 'echo' command */
+ if (_tcsicmp (com, _T("echo")))
+ {
+ while (_istspace (*rest))
rest++;
+ }
/* Scan internal command table */
for (cmdptr = cmds;; cmdptr++)
}
}
}
+ /* Just in case a CTRL+C slipped through a command */
+ bCtrlBreak = FALSE;
free(com);
}
return ret;
}
- return _T(""); /* not found - return empty string */
+ GrowIfNecessary(_tcslen(varName) + 2, &ret, &retlen);
+ _stprintf(ret,_T("%%%s%%"),varName);
+ return ret; /* not found - return orginal string */
}
LPCTSTR
{
UINT envNameLen;
LPCTSTR envVal = GetParsedEnvVar ( ip, &envNameLen, bModeSetA );
- if ( !envVal )
- return 1;
- ip += envNameLen;
- cp = _stpcpy ( cp, envVal );
- continue;
+ if ( envVal )
+ {
+ ip += envNameLen;
+ cp = _stpcpy ( cp, envVal );
+ }
}
if (_istcntrl (*ip))
ConOutPuts (commandline);
}
- if (*commandline)
+ if (*commandline && !CheckCtrlBreak(BREAK_INPUT))
{
ParseCommandLine (commandline);
if (bEcho && !bIgnoreEcho && (!bIsBatch || bEchoThisLine))
BOOL WINAPI BreakHandler (DWORD dwCtrlType)
{
+ DWORD dwWritten;
+ INPUT_RECORD rec;
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))
{