-/* $Id$
- *
+/*
* CMD.C - command-line interface.
*
*
* 12-Jul-2004 (Jens Collin <jens.collin@lakhei.com>)
* Added ShellExecute call when all else fails to be able to "launch" any file.
*
- * 02-Apr-2005 (Magnus Olsen) <magnus@greatlord.com>)
- * Remove all hardcode string to En.rc
+ * 02-Apr-2005 (Magnus Olsen <magnus@greatlord.com>)
+ * Remove all hardcode string to En.rc
+ *
+ * 06-May-2005 (Klemens Friedl <frik85@gmail.com>)
+ * Add 'help' command (list all commands plus description)
*/
#include "precomp.h"
HANDLE hIn;
HANDLE hOut;
HANDLE hConsole;
+HANDLE CMD_ModuleHandle;
static NtQueryInformationProcessProc NtQueryInformationProcessPtr;
static NtReadVirtualMemoryProc NtReadVirtualMemoryPtr;
working = SetCurrentDirectory(str);
}
- if (!working) ConErrPuts (INVALIDDRIVE);
+ if (!working) ConErrResPuts (STRING_FREE_ERROR1);
return;
}
ENABLE_PROCESSED_INPUT );
}
+ /* Get code page if it has been change */
+ InputCodePage= GetConsoleCP();
+ OutputCodePage = GetConsoleOutputCP();
#ifndef __REACTOS__
SetConsoleTitle (szWindowTitle);
#endif
VOID ParseCommandLine (LPTSTR cmd)
{
+ TCHAR szMsg[RC_STRING_MAX_SIZE];
TCHAR cmdline[CMDLINE_LENGTH];
LPTSTR s;
- WCHAR szMsg[RC_STRING_MAX_SIZE];
#ifdef FEATURE_REDIRECTION
TCHAR in[CMDLINE_LENGTH] = _T("");
TCHAR out[CMDLINE_LENGTH] = _T("");
FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
- LoadString( GetModuleHandle(NULL), STRING_CMD_ERROR1, (LPTSTR) szMsg,sizeof(szMsg));
- ConErrPrintf (_T((LPTSTR)szMsg), in);
+ LoadString(CMD_ModuleHandle, STRING_CMD_ERROR1, szMsg, RC_STRING_MAX_SIZE);
+ ConErrPrintf(szMsg, in);
return;
}
if (!SetStdHandle (STD_INPUT_HANDLE, hFile))
{
- LoadString( GetModuleHandle(NULL), STRING_CMD_ERROR1, (LPTSTR) szMsg,sizeof(szMsg));
- ConErrPrintf (_T((LPTSTR)szMsg), in);
+ LoadString(CMD_ModuleHandle, STRING_CMD_ERROR1, szMsg, RC_STRING_MAX_SIZE);
+ ConErrPrintf(szMsg, in);
return;
}
#ifdef _DEBUG
/* Set current stdout to temporary file */
hFile[1] = CreateFile (szFileName[1], GENERIC_WRITE, 0, &sa,
TRUNCATE_EXISTING, FILE_ATTRIBUTE_TEMPORARY, NULL);
-
- if (hFile[1] == INVALID_HANDLE_VALUE){
-
- LoadString( GetModuleHandle(NULL), STRING_CMD_ERROR2, (LPTSTR) szMsg,sizeof(szMsg));
- ConErrPrintf (_T((LPTSTR)szMsg));
- return;
- }
+ if (hFile[1] == INVALID_HANDLE_VALUE)
+ {
+ LoadString(CMD_ModuleHandle, STRING_CMD_ERROR2, szMsg, RC_STRING_MAX_SIZE);
+ ConErrPrintf(szMsg);
+ return;
+ }
SetStdHandle (STD_OUTPUT_HANDLE, hFile[1]);
FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
- LoadString( GetModuleHandle(NULL), STRING_CMD_ERROR3, (LPTSTR) szMsg,sizeof(szMsg));
- ConErrPrintf (_T((LPTSTR)szMsg), out);
-
+ LoadString(CMD_ModuleHandle, STRING_CMD_ERROR3, szMsg, RC_STRING_MAX_SIZE);
+ ConErrPrintf(szMsg, out);
return;
}
if (!SetStdHandle (STD_OUTPUT_HANDLE, hFile))
{
- LoadString( GetModuleHandle(NULL), STRING_CMD_ERROR3, (LPTSTR) szMsg,sizeof(szMsg));
- ConErrPrintf (_T((LPTSTR)szMsg), out);
+ LoadString(CMD_ModuleHandle, STRING_CMD_ERROR3, szMsg, RC_STRING_MAX_SIZE);
+ ConErrPrintf(szMsg, out);
return;
}
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
- LoadString( GetModuleHandle(NULL), STRING_CMD_ERROR3, (LPTSTR) szMsg,sizeof(szMsg));
- ConErrPrintf (_T((LPTSTR)szMsg), err);
-
+ LoadString(CMD_ModuleHandle, STRING_CMD_ERROR3, szMsg, RC_STRING_MAX_SIZE);
+ ConErrPrintf(szMsg, err);
return;
}
}
+
if (!SetStdHandle (STD_ERROR_HANDLE, hFile))
{
- LoadString( GetModuleHandle(NULL), STRING_CMD_ERROR3, (LPTSTR) szMsg,sizeof(szMsg));
- ConErrPrintf (_T((LPTSTR)szMsg), err);
-
+ LoadString(CMD_ModuleHandle, STRING_CMD_ERROR3, szMsg, RC_STRING_MAX_SIZE);
+ ConErrPrintf(szMsg, err);
return;
}
LPTSTR ip;
LPTSTR cp;
BOOL bEchoThisLine;
-
+
do
{
*/
BOOL WINAPI BreakHandler (DWORD dwCtrlType)
{
-
+
if ((dwCtrlType != CTRL_C_EVENT) &&
(dwCtrlType != CTRL_BREAK_EVENT))
return FALSE;
static VOID
ShowCommands (VOID)
{
- WCHAR szMsg[RC_STRING_MAX_SIZE];
-
/* print command list */
- LoadString( GetModuleHandle(NULL), STRING_CMD_HELP1, (LPTSTR) szMsg,sizeof(szMsg));
- ConOutPrintf (_T((LPTSTR)szMsg));
- PrintCommandList ();
+ ConOutResPuts(STRING_CMD_HELP1);
+ PrintCommandList();
/* print feature list */
- LoadString( GetModuleHandle(NULL), STRING_CMD_HELP2, (LPTSTR) szMsg,sizeof(szMsg));
- ConOutPuts (_T((LPTSTR)szMsg));
+ ConOutResPuts(STRING_CMD_HELP2);
-#ifdef FEATURE_ALIASES
- LoadString( GetModuleHandle(NULL), STRING_CMD_HELP3, (LPTSTR) szMsg,sizeof(szMsg));
- ConOutPuts (_T((LPTSTR)szMsg));
+#ifdef FEATURE_ALIASES
+ ConOutResPuts(STRING_CMD_HELP3);
#endif
#ifdef FEATURE_HISTORY
- LoadString( GetModuleHandle(NULL), STRING_CMD_HELP4, (LPTSTR) szMsg,sizeof(szMsg));
- ConOutPuts (_T((LPTSTR)szMsg));
+ ConOutResPuts(STRING_CMD_HELP4);
#endif
#ifdef FEATURE_UNIX_FILENAME_COMPLETION
- LoadString( GetModuleHandle(NULL), STRING_CMD_HELP5, (LPTSTR) szMsg,sizeof(szMsg));
- ConOutPuts (_T((LPTSTR)szMsg));
+ ConOutResPuts(STRING_CMD_HELP5);
#endif
#ifdef FEATURE_DIRECTORY_STACK
- LoadString( GetModuleHandle(NULL), STRING_CMD_HELP6, (LPTSTR) szMsg,sizeof(szMsg));
- ConOutPuts (_T((LPTSTR)szMsg));
+ ConOutResPuts(STRING_CMD_HELP6);
#endif
#ifdef FEATURE_REDIRECTION
- LoadString( GetModuleHandle(NULL), STRING_CMD_HELP7, (LPTSTR) szMsg,sizeof(szMsg));
- ConOutPuts (_T((LPTSTR)szMsg));
+ ConOutResPuts(STRING_CMD_HELP7);
#endif
- ConOutChar (_T('\n'));
+ ConOutChar(_T('\n'));
}
#endif
TCHAR commandline[CMDLINE_LENGTH];
TCHAR ModuleName[_MAX_PATH + 1];
INT i;
- WCHAR szMsg[RC_STRING_MAX_SIZE];
//INT len;
//TCHAR *ptr, *cmdLine;
if (argc >= 2 && !_tcsncmp (argv[1], _T("/?"), 2))
{
- LoadString( GetModuleHandle(NULL), STRING_CMD_HELP8, (LPTSTR) szMsg,sizeof(szMsg));
- ConOutPuts (_T((LPTSTR)szMsg));
- ExitProcess (0);
+ ConOutResPuts(STRING_CMD_HELP8);
+ ExitProcess(0);
}
SetConsoleMode (hIn, ENABLE_PROCESSED_INPUT);
if (IsExistingFile (_T("commandline")))
{
- LoadString( GetModuleHandle(NULL), STRING_CMD_ERROR4, (LPTSTR) szMsg,sizeof(szMsg));
- ConErrPrintf (_T((LPTSTR)szMsg), commandline);
+ LoadString(CMD_ModuleHandle, STRING_CMD_ERROR4, szMsg, RC_STRING_MAX_SIZE);
+ ConErrPrintf(szMsg, commandline);
ParseCommandLine (commandline);
}
}
static VOID Cleanup (int argc, TCHAR *argv[])
{
- WCHAR szMsg[RC_STRING_MAX_SIZE];
+#ifndef __REACTOS__
+ TCHAR szMsg[RC_STRING_MAX_SIZE];
+#endif
/* run cmdexit.bat */
if (IsExistingFile (_T("cmdexit.bat")))
{
- LoadString( GetModuleHandle(NULL), STRING_CMD_ERROR5, (LPTSTR) szMsg,sizeof(szMsg));
- ConErrPrintf (_T((LPTSTR)szMsg));
+ ConErrResPuts(STRING_CMD_ERROR5);
ParseCommandLine (_T("cmdexit.bat"));
}
else if (IsExistingFile (_T("\\cmdexit.bat")))
{
- LoadString( GetModuleHandle(NULL), STRING_CMD_ERROR5, (LPTSTR) szMsg,sizeof(szMsg));
- ConErrPrintf (_T((LPTSTR)szMsg));
+ ConErrResPuts (STRING_CMD_ERROR5);
ParseCommandLine (_T("\\cmdexit.bat"));
}
#ifndef __REACTOS__
if (IsExistingFile (_T("commandline")))
{
- LoadString( GetModuleHandle(NULL), STRING_CMD_ERROR4, (LPTSTR) szMsg,sizeof(szMsg));
- ConErrPrintf (_T((LPTSTR)szMsg), commandline);
+ LoadString(CMD_ModuleHandle, STRING_CMD_ERROR4, szMsg, RC_STRING_MAX_SIZE);
+ ConErrPrintf(szMsg, commandline);
ParseCommandLine (commandline);
}
}
#endif
SetFileApisToOEM();
+ InputCodePage= 0;
+ OutputCodePage = 0;
hConsole = CreateFile(_T("CONOUT$"), GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
wColor = Info.wAttributes;
wDefColor = wColor;
+ InputCodePage= GetConsoleCP();
+ OutputCodePage = GetConsoleOutputCP();
+ CMD_ModuleHandle = GetModuleHandle(NULL);
+
/* check switches on command-line */
Initialize(argc, argv);