- Fixed the parameter check of the echo command.

- Remove the first space after the echo command.
- Do never check for parameters if the delimiter is a point.

svn path=/trunk/; revision=19467
This commit is contained in:
Hartmut Birr 2005-11-22 18:01:02 +00:00
parent 498c359615
commit 72811fbd1d

View file

@ -33,44 +33,70 @@
INT CommandEcho (LPTSTR cmd, LPTSTR param)
{
TCHAR szMsg[RC_STRING_MAX_SIZE];
UINT i = 0;
LPTSTR p1, p2;
#ifdef _DEBUG
DebugPrintf (_T("CommandEcho '%s' : '%s'\n"), cmd, param);
#endif
if (!_tcsncmp (param, _T("/?"), 2))
{
ConOutResPaging(TRUE,STRING_ECHO_HELP4);
return 0;
}
if (_tcsicmp (cmd, _T("echo.")) == 0)
if (_tcsicmp (cmd, _T("echo.")) == 0)
{
if (param[0] == 0)
ConOutChar (_T('\n'));
else
ConOutPuts (param);
}
else
{
if (_tcsicmp (param, D_OFF) == 0)
bEcho = FALSE;
else if (_tcsicmp (param, D_ON) == 0)
bEcho = TRUE;
else if (*param)
else
{
/* skip the first delimiter */
if (_istspace(*param))
param++;
/* skip all spaces for the check of '/?', 'ON' and 'OFF' */
p1 = param;
while(_istspace(*p1))
p1++;
if (!_tcsncmp (p1, _T("/?"), 2))
{
ConOutResPaging(TRUE,STRING_ECHO_HELP4);
return 0;
}
if (_tcsnicmp (p1, D_OFF, sizeof(D_OFF)/sizeof(TCHAR) - 1) == 0)
{
p2 = p1 + sizeof(D_OFF)/sizeof(TCHAR) - 1;
while (_istspace(*p2))
p2++;
if (*p2 == _T('\0'))
{
bEcho = FALSE;
return 0;
}
}
else if (_tcsnicmp (p1, D_ON, sizeof(D_ON)/sizeof(TCHAR) - 1) == 0)
{
p2 = p1 + sizeof(D_ON)/sizeof(TCHAR) - 1;
while (_istspace(*p2))
p2++;
if (*p2 == _T('\0'))
{
bEcho = TRUE;
return 0;
}
}
if (*p1 != _T('\0'))
{
while(i < _tcslen(param))
{
if(param[i] == _T('^'))
{
memmove(&param[i],&param[i + 1], _tcslen(&param[i]) * sizeof(TCHAR));
//skip past the char being escaped
i++;
}
else
i++;
}
p1 = param;
while (NULL != (p1 = _tcschr(p1, _T('^'))))
{
memmove(p1, p1 + 1, (_tcslen(p1 + 1) + 1) * sizeof(TCHAR));
if (*p1)
{
//skip past the char being escaped
p1++;
}
}
ConOutPuts (param);
}
else