mirror of
https://github.com/reactos/reactos.git
synced 2025-08-07 05:52:57 +00:00
Added simple START command.
svn path=/trunk/; revision=605
This commit is contained in:
parent
0063a30376
commit
e3c471cf82
12 changed files with 266 additions and 152 deletions
116
rosapps/cmd/start.c
Normal file
116
rosapps/cmd/start.c
Normal file
|
@ -0,0 +1,116 @@
|
|||
/*
|
||||
* START.C - start internal command.
|
||||
*
|
||||
*
|
||||
* History:
|
||||
*
|
||||
* 24-Jul-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
|
||||
* Started.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifdef INCLUDE_CMD_START
|
||||
#include <windows.h>
|
||||
#include <tchar.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "cmd.h"
|
||||
|
||||
|
||||
INT cmd_start (LPTSTR first, LPTSTR rest)
|
||||
{
|
||||
TCHAR szFullName[MAX_PATH];
|
||||
BOOL bWait = FALSE;
|
||||
|
||||
if (_tcsncmp (rest, _T("/?"), 2) == 0)
|
||||
{
|
||||
ConOutPuts (_T("Starts a command.\n\n"
|
||||
"START command \n\n"
|
||||
" command Specifies the command to run.\n\n"
|
||||
"At the moment all commands are started asynchronously.\n"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* check for a drive change */
|
||||
if (!_tcscmp (first + 1, _T(":")) && _istalpha (*first))
|
||||
{
|
||||
TCHAR szPath[MAX_PATH];
|
||||
|
||||
_tcscpy (szPath, _T("A:"));
|
||||
szPath[0] = _totupper (*first);
|
||||
SetCurrentDirectory (szPath);
|
||||
GetCurrentDirectory (MAX_PATH, szPath);
|
||||
if (szPath[0] != (TCHAR)_totupper (*first))
|
||||
ConErrPuts (INVALIDDRIVE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* get the PATH environment variable and parse it */
|
||||
/* search the PATH environment variable for the binary */
|
||||
if (!SearchForExecutable (first, szFullName))
|
||||
{
|
||||
error_bad_command ();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* check if this is a .BAT or .CMD file */
|
||||
if (!_tcsicmp (_tcsrchr (szFullName, _T('.')), _T(".bat")) ||
|
||||
!_tcsicmp (_tcsrchr (szFullName, _T('.')), _T(".cmd")))
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
DebugPrintf ("[BATCH: %s %s]\n", szFullName, rest);
|
||||
#endif
|
||||
ConErrPuts (_T("No batch support at the moment!"));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* exec the program */
|
||||
TCHAR szFullCmdLine [1024];
|
||||
PROCESS_INFORMATION prci;
|
||||
STARTUPINFO stui;
|
||||
|
||||
#ifdef _DEBUG
|
||||
DebugPrintf ("[EXEC: %s %s]\n", szFullName, rest);
|
||||
#endif
|
||||
/* build command line for CreateProcess() */
|
||||
_tcscpy (szFullCmdLine, szFullName);
|
||||
_tcscat (szFullCmdLine, _T(" "));
|
||||
_tcscat (szFullCmdLine, rest);
|
||||
|
||||
/* fill startup info */
|
||||
memset (&stui, 0, sizeof (STARTUPINFO));
|
||||
stui.cb = sizeof (STARTUPINFO);
|
||||
stui.dwFlags = STARTF_USESHOWWINDOW;
|
||||
stui.wShowWindow = SW_SHOWDEFAULT;
|
||||
|
||||
if (CreateProcess (NULL, szFullCmdLine, NULL, NULL, FALSE,
|
||||
0, NULL, NULL, &stui, &prci))
|
||||
{
|
||||
if (bWait)
|
||||
{
|
||||
DWORD dwExitCode;
|
||||
WaitForSingleObject (prci.hProcess, INFINITE);
|
||||
GetExitCodeProcess (prci.hProcess, &dwExitCode);
|
||||
nErrorLevel = (INT)dwExitCode;
|
||||
CloseHandle (prci.hThread);
|
||||
CloseHandle (prci.hProcess);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorMessage (GetLastError (),
|
||||
"Error executing CreateProcess()!!\n");
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* EOF */
|
Loading…
Add table
Add a link
Reference in a new issue