reactos/base/shell/cmd/color.c
Timo Kreuzer 9ea495ba33 Create a branch for header work.
svn path=/branches/header-work/; revision=45691
2010-02-26 22:57:55 +00:00

140 lines
2.7 KiB
C

/*
* COLOR.C - color internal command.
*
*
* History:
*
* 13-Dec-1998 (Eric Kohl)
* Started.
*
* 19-Jan-1999 (Eric Kohl)
* Unicode ready!
*
* 20-Jan-1999 (Eric Kohl)
* Redirection ready!
*
* 14-Oct-1999 (Paolo Pantaleo <paolopan@freemail.it>)
* 4nt's syntax implemented.
*
* 03-Apr-2005 (Magnus Olsen) <magnus@greatlord.com>)
* Move all hardcoded strings to En.rc.
*/
#include <precomp.h>
#ifdef INCLUDE_CMD_COLOR
VOID SetScreenColor (WORD wColor, BOOL bNoFill)
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi;
COORD coPos;
if ((wColor & 0xF) == (wColor &0xF0) >> 4)
{
ConErrResPuts(STRING_COLOR_ERROR1);
}
else
{
if (bNoFill != TRUE)
{
GetConsoleScreenBufferInfo (hConsole, &csbi);
coPos.X = 0;
coPos.Y = 0;
FillConsoleOutputAttribute (hConsole,
(WORD)(wColor & 0x00FF),
(csbi.dwSize.X)*(csbi.dwSize.Y),
coPos,
&dwWritten);
}
SetConsoleTextAttribute (hConsole, (WORD)(wColor & 0x00FF));
}
}
/*
* color
*
* internal dir command
*/
INT CommandColor (LPTSTR rest)
{
WORD wColor;
if (_tcsncmp (rest, _T("/?"), 2) == 0)
{
ConOutResPaging(TRUE,STRING_COLOR_HELP1);
return 0;
}
nErrorLevel = 0;
if (rest[0] == _T('\0'))
{
/* set default color */
wColor = wDefColor;
SetScreenColor (wColor, FALSE);
return 0;
}
if ( _tcslen(&rest[0])==1)
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if ( (_tcscmp(&rest[0], _T("0")) >=0 ) && (_tcscmp(&rest[0], _T("9")) <=0 ) )
{
SetConsoleTextAttribute (hConsole, (WORD)_ttoi(rest));
return 0;
}
else if ( (_tcscmp(&rest[0], _T("a")) >=0 ) && (_tcscmp(&rest[0], _T("f")) <=0 ) )
{
SetConsoleTextAttribute (hConsole, (WORD) (rest[0] + 10 - _T('a')) );
return 0;
}
else if ( (_tcscmp(&rest[0], _T("A")) >=0 ) && (_tcscmp(&rest[0], _T("F")) <=0 ) )
{
SetConsoleTextAttribute (hConsole, (WORD) (rest[0] + 10 - _T('A')) );
return 0;
}
ConErrResPuts(STRING_COLOR_ERROR2);
nErrorLevel = 1;
return 1;
}
if (StringToColor(&wColor, &rest) == FALSE)
{
ConErrResPuts(STRING_COLOR_ERROR2);
nErrorLevel = 1;
return 1;
}
if (((bc) && (bc->bEcho)) || !bc)
{
ConErrResPrintf(STRING_COLOR_ERROR3, wColor);
}
if ((wColor & 0xF) == (wColor &0xF0) >> 4)
{
ConErrResPrintf(STRING_COLOR_ERROR4, wColor);
nErrorLevel = 1;
return 1;
}
/* set color */
SetScreenColor(wColor,
(_tcsstr (rest,_T("/-F")) || _tcsstr (rest,_T("/-f"))));
return 0;
}
#endif /* INCLUDE_CMD_COLOR */
/* EOF */