mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
Remove shell
svn path=/trunk/; revision=4378
This commit is contained in:
parent
dc30187ea9
commit
285f0befdd
4 changed files with 0 additions and 569 deletions
|
@ -1,6 +0,0 @@
|
|||
shell.coff
|
||||
shell.exe
|
||||
shell.nostrip.exe
|
||||
*.d
|
||||
*.o
|
||||
*.sym
|
|
@ -1,21 +0,0 @@
|
|||
# $Id: makefile,v 1.5 2001/08/21 20:13:04 chorns Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = console
|
||||
|
||||
TARGET_NAME = shell
|
||||
|
||||
TARGET_INSTALLDIR = system32
|
||||
|
||||
TARGET_SDKLIBS = ntdll.a kernel32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
|
@ -1,504 +0,0 @@
|
|||
/* $Id: shell.c,v 1.12 2002/09/08 10:23:47 chorns Exp $
|
||||
*
|
||||
* PROJECT : ReactOS Operating System
|
||||
* DESCRIPTION: ReactOS' Native Shell
|
||||
* LICENSE : See top level directory
|
||||
*
|
||||
*/
|
||||
#define NTOS_MODE_USER
|
||||
#include <ntos.h>
|
||||
#include <windows.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
|
||||
HANDLE InputHandle, OutputHandle;
|
||||
BOOL bCanExit = TRUE, bCanLinespace = TRUE;
|
||||
|
||||
|
||||
void debug_printf(char* fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char buffer[512];
|
||||
DWORD nbChar;
|
||||
|
||||
va_start(args,fmt);
|
||||
_vsnprintf(buffer,512,fmt,args);
|
||||
va_end(args);
|
||||
WriteConsoleA(OutputHandle, buffer, strlen(buffer), &nbChar, NULL);
|
||||
}
|
||||
|
||||
void ExecuteCls(void)
|
||||
{
|
||||
DWORD dwWritten;
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
COORD coPos;
|
||||
|
||||
GetConsoleScreenBufferInfo (OutputHandle, &csbi);
|
||||
|
||||
coPos.X = 0;
|
||||
coPos.Y = 0;
|
||||
FillConsoleOutputAttribute (OutputHandle, csbi.wAttributes, (csbi.dwSize.X)*(csbi.dwSize.Y), coPos, &dwWritten);
|
||||
FillConsoleOutputCharacter (OutputHandle, _T(' '), (csbi.dwSize.X)*(csbi.dwSize.Y), coPos, &dwWritten);
|
||||
SetConsoleCursorPosition (OutputHandle, coPos);
|
||||
}
|
||||
|
||||
void ExecuteVer(void)
|
||||
{
|
||||
debug_printf(
|
||||
"Reactos Simple Shell\n(compiled on %s, at %s)\n",
|
||||
__DATE__,
|
||||
__TIME__
|
||||
);
|
||||
}
|
||||
|
||||
void ExecuteCd(char* cmdline)
|
||||
{
|
||||
if (!SetCurrentDirectoryA(cmdline))
|
||||
{
|
||||
debug_printf("Invalid directory\n");
|
||||
}
|
||||
}
|
||||
|
||||
void ExecuteMd (char *cmdline)
|
||||
{
|
||||
if (!CreateDirectoryA (cmdline, NULL))
|
||||
{
|
||||
debug_printf("Create Directory failed!\n");
|
||||
}
|
||||
}
|
||||
|
||||
void ExecuteDir(char* cmdline)
|
||||
{
|
||||
HANDLE shandle;
|
||||
WIN32_FIND_DATA FindData;
|
||||
int nFile=0, nRep=0;
|
||||
FILETIME fTime;
|
||||
SYSTEMTIME sTime;
|
||||
|
||||
shandle = FindFirstFile("*",&FindData);
|
||||
|
||||
if (shandle==INVALID_HANDLE_VALUE)
|
||||
{
|
||||
debug_printf("File not found\n");
|
||||
return;
|
||||
}
|
||||
do
|
||||
{
|
||||
debug_printf("%-15.15s",FindData.cAlternateFileName);
|
||||
if(FindData.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)
|
||||
debug_printf("<DIR> "),nRep++;
|
||||
else
|
||||
debug_printf(" %10d ",FindData.nFileSizeLow),nFile++;
|
||||
|
||||
FileTimeToLocalFileTime(&FindData.ftLastWriteTime ,&fTime);
|
||||
FileTimeToSystemTime(&fTime, &sTime);
|
||||
debug_printf("%02d/%02d/%04d %02d:%02d:%02d "
|
||||
,sTime.wMonth,sTime.wDay,sTime.wYear
|
||||
,sTime.wHour,sTime.wMinute,sTime.wSecond);
|
||||
|
||||
debug_printf("%s\n",FindData.cFileName);
|
||||
} while(FindNextFile(shandle,&FindData));
|
||||
debug_printf("\n %d files\n %d directories\n",nFile,nRep);
|
||||
FindClose(shandle);
|
||||
}
|
||||
|
||||
|
||||
void ExecuteReboot(char* cmdline)
|
||||
{
|
||||
NtShutdownSystem (ShutdownReboot);
|
||||
}
|
||||
|
||||
|
||||
void ExecuteShutdown(char* cmdline)
|
||||
{
|
||||
NtShutdownSystem (ShutdownNoReboot);
|
||||
}
|
||||
|
||||
|
||||
void ExecuteType(char* cmdline)
|
||||
{
|
||||
HANDLE FileHandle;
|
||||
char c;
|
||||
DWORD Result;
|
||||
BOOL Success;
|
||||
|
||||
FileHandle = CreateFile(cmdline,
|
||||
FILE_GENERIC_READ,
|
||||
0,
|
||||
NULL,
|
||||
OPEN_EXISTING,
|
||||
0,
|
||||
NULL);
|
||||
if (FileHandle == NULL)
|
||||
{
|
||||
debug_printf("Unknown file\n");
|
||||
return;
|
||||
}
|
||||
do
|
||||
{
|
||||
Success = ReadFile(FileHandle,
|
||||
&c,
|
||||
1,
|
||||
&Result,
|
||||
NULL);
|
||||
if (Success)
|
||||
{
|
||||
debug_printf("%c",c);
|
||||
c = 0;
|
||||
}
|
||||
} while (Success && Result > 0);
|
||||
CloseHandle(FileHandle);
|
||||
}
|
||||
|
||||
int ExecuteProcess(char* name, char* cmdline, BOOL detached)
|
||||
{
|
||||
PROCESS_INFORMATION ProcessInformation;
|
||||
STARTUPINFO StartupInfo;
|
||||
BOOL ret;
|
||||
CHAR fullname[260];
|
||||
PCHAR p;
|
||||
|
||||
/* append '.exe' if needed */
|
||||
strcpy (fullname, name);
|
||||
p = strrchr (fullname, '.');
|
||||
if ((p == NULL) ||
|
||||
(_stricmp (p, ".exe") != 0))
|
||||
{
|
||||
strcat (fullname, ".exe");
|
||||
}
|
||||
|
||||
memset(&StartupInfo, 0, sizeof(StartupInfo));
|
||||
StartupInfo.cb = sizeof (STARTUPINFO);
|
||||
StartupInfo.lpTitle = name;
|
||||
if( cmdline && *cmdline )
|
||||
*(cmdline-1) = ' '; // fix command line so it is the FULL command, including exe name
|
||||
ret = CreateProcessA(fullname,
|
||||
name,
|
||||
NULL,
|
||||
NULL,
|
||||
FALSE,
|
||||
((TRUE == detached)
|
||||
? CREATE_NEW_CONSOLE
|
||||
: 0
|
||||
),
|
||||
NULL,
|
||||
NULL,
|
||||
& StartupInfo,
|
||||
& ProcessInformation
|
||||
);
|
||||
if (TRUE == detached)
|
||||
{
|
||||
if (ret)
|
||||
{
|
||||
debug_printf("\"%s\" detached:\n"
|
||||
"\thProcess = %08X\n"
|
||||
"\thThread = %08X\n"
|
||||
"\tPID = %d\n"
|
||||
"\tTID = %d\n\n",
|
||||
fullname,
|
||||
ProcessInformation.hProcess,
|
||||
ProcessInformation.hThread,
|
||||
ProcessInformation.dwProcessId,
|
||||
ProcessInformation.dwThreadId);
|
||||
CloseHandle(ProcessInformation.hProcess);
|
||||
CloseHandle(ProcessInformation.hThread);
|
||||
}
|
||||
else
|
||||
{
|
||||
debug_printf("Could not detach %s\n", name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ret)
|
||||
{
|
||||
// debug_printf("ProcessInformation.hThread %x\n",
|
||||
// ProcessInformation.hThread);
|
||||
WaitForSingleObject(ProcessInformation.hProcess, INFINITE);
|
||||
CloseHandle(ProcessInformation.hProcess);
|
||||
// debug_printf("Thandle %x\n", ProcessInformation.hThread);
|
||||
CloseHandle(ProcessInformation.hThread);
|
||||
}
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
|
||||
void ExecuteStart(char* CommandLine)
|
||||
{
|
||||
char *ImageName = CommandLine;
|
||||
|
||||
for ( ;
|
||||
( (*CommandLine)
|
||||
&& (*CommandLine != ' ')
|
||||
&& (*CommandLine != '\t')
|
||||
);
|
||||
CommandLine++
|
||||
);
|
||||
*CommandLine++ = '\0';
|
||||
while ( (*CommandLine)
|
||||
&& ( (*CommandLine == ' ')
|
||||
|| (*CommandLine == '\t')
|
||||
)
|
||||
);
|
||||
ExecuteProcess(
|
||||
ImageName,
|
||||
CommandLine,
|
||||
TRUE
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
ExecuteKill(char * lpPid)
|
||||
{
|
||||
HANDLE hProcess;
|
||||
DWORD dwProcessId;
|
||||
|
||||
dwProcessId = (DWORD) atol(lpPid);
|
||||
debug_printf("Killing PID %d...\n",dwProcessId);
|
||||
hProcess = OpenProcess(
|
||||
PROCESS_TERMINATE,
|
||||
FALSE,
|
||||
dwProcessId
|
||||
);
|
||||
if (NULL == hProcess)
|
||||
{
|
||||
debug_printf(
|
||||
"Could not open the process with PID = %d\n",
|
||||
dwProcessId
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (FALSE == TerminateProcess(
|
||||
hProcess,
|
||||
0
|
||||
)
|
||||
) {
|
||||
debug_printf(
|
||||
"Could not terminate the process with PID = %d\n",
|
||||
dwProcessId
|
||||
);
|
||||
}
|
||||
CloseHandle(hProcess);
|
||||
return;
|
||||
}
|
||||
|
||||
void ExecuteHelp (void * dummy)
|
||||
{
|
||||
debug_printf (
|
||||
"A:\t\t\tCurrent drive is A:\n"
|
||||
"C:\t\t\tCurrent drive is C:\n"
|
||||
"cd [directory]\t\tChange current directory\n"
|
||||
"dir [directory]\t\tList directory\n"
|
||||
"exit\t\t\tTerminate the shell\n"
|
||||
"help\t\t\tPrint this help message\n"
|
||||
"kill [pid]\t\tKill process which PID is pid\n"
|
||||
"md [directory]\t\tCreate a new directory\n"
|
||||
"reboot\t\t\tRestart the system\n"
|
||||
"start [program.exe]\tDetach program.exe\n"
|
||||
"type [file]\t\tPrint the file on console\n"
|
||||
"validate\t\tValidate the process' heap\n"
|
||||
"ver\t\t\tPrint version information\n"
|
||||
"[program.exe]\t\tStart synchronously program.exe\n"
|
||||
);
|
||||
}
|
||||
|
||||
void ExecuteCommand(char* line)
|
||||
{
|
||||
char* cmd;
|
||||
char* tail;
|
||||
|
||||
if (isalpha(line[0]) && line[1] == ':' && line[2] == 0)
|
||||
{
|
||||
char szPath[MAX_PATH];
|
||||
char szVar[5];
|
||||
|
||||
/* save curent directory in environment variable */
|
||||
GetCurrentDirectory (MAX_PATH, szPath);
|
||||
|
||||
strcpy (szVar, "=A:");
|
||||
szVar[1] = toupper (szPath[0]);
|
||||
SetEnvironmentVariable (szVar, szPath);
|
||||
|
||||
/* check for current directory of new drive */
|
||||
strcpy (szVar, "=A:");
|
||||
szVar[1] = toupper (line[0]);
|
||||
if (GetEnvironmentVariable (szVar, szPath, MAX_PATH) == 0)
|
||||
{
|
||||
/* no environment variable found */
|
||||
strcpy (szPath, "A:\\");
|
||||
szPath[0] = toupper (line[0]);
|
||||
}
|
||||
|
||||
/* set new current directory */
|
||||
SetCurrentDirectory (szPath);
|
||||
GetCurrentDirectory (MAX_PATH, szPath);
|
||||
if (szPath[0] != (char)toupper (line[0]))
|
||||
debug_printf("Invalid drive\n");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
tail = line;
|
||||
while ((*tail)!=' ' && (*tail)!=0)
|
||||
{
|
||||
tail++;
|
||||
}
|
||||
if ((*tail)==' ')
|
||||
{
|
||||
*tail = 0;
|
||||
tail++;
|
||||
}
|
||||
cmd = line;
|
||||
|
||||
|
||||
if (cmd==NULL || *cmd == '\0' )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"cd")==0)
|
||||
{
|
||||
ExecuteCd(tail);
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"dir")==0)
|
||||
{
|
||||
ExecuteDir(tail);
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"kill")==0)
|
||||
{
|
||||
ExecuteKill(tail);
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"md")==0)
|
||||
{
|
||||
ExecuteMd(tail);
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"reboot")==0)
|
||||
{
|
||||
ExecuteReboot(tail);
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"shutdown")==0)
|
||||
{
|
||||
ExecuteShutdown(tail);
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"type")==0)
|
||||
{
|
||||
ExecuteType(tail);
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"ver")==0)
|
||||
{
|
||||
ExecuteVer();
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"validate")==0)
|
||||
{
|
||||
debug_printf("Validating heap...");
|
||||
if (HeapValidate(GetProcessHeap(),0,NULL))
|
||||
{
|
||||
debug_printf("succeeded\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
debug_printf("failed\n");
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"start") == 0)
|
||||
{
|
||||
ExecuteStart(tail);
|
||||
return;
|
||||
}
|
||||
if ((strcmp(cmd,"help") * strcmp(cmd,"?")) == 0)
|
||||
{
|
||||
ExecuteHelp(tail);
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"exit")==0)
|
||||
{
|
||||
if (bCanExit == TRUE)
|
||||
{
|
||||
ExitProcess(0);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (strcmp(cmd,"cls") == 0)
|
||||
{
|
||||
ExecuteCls();
|
||||
bCanLinespace = FALSE;
|
||||
return;
|
||||
}
|
||||
if (ExecuteProcess(cmd,tail,FALSE))
|
||||
{
|
||||
return;
|
||||
}
|
||||
debug_printf("Unknown command '%s'\n", cmd);
|
||||
}
|
||||
|
||||
void ReadLine(char* line)
|
||||
{
|
||||
DWORD Result;
|
||||
UCHAR CurrentDir[255];
|
||||
|
||||
GetCurrentDirectoryA(255,CurrentDir);
|
||||
debug_printf("%s>", CurrentDir);
|
||||
if ( !ReadConsoleA(InputHandle, line, 252, &Result, NULL) )
|
||||
{
|
||||
debug_printf("Failed to read from console\n");
|
||||
for(;;);
|
||||
}
|
||||
// If the \n is in there, so is the \r so null it, otherwise, null the last char
|
||||
if( line[Result-1] == '\n' )
|
||||
line[Result-2] = 0;
|
||||
else {
|
||||
line[Result] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void ParseCommandLine (void)
|
||||
{
|
||||
char *pszCommandLine;
|
||||
|
||||
pszCommandLine = GetCommandLineA ();
|
||||
_strupr (pszCommandLine);
|
||||
if (strstr (pszCommandLine, "/P") != NULL)
|
||||
{
|
||||
debug_printf("Permanent shell\n");
|
||||
bCanExit = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
static char line[256];
|
||||
|
||||
AllocConsole();
|
||||
InputHandle = GetStdHandle(STD_INPUT_HANDLE);
|
||||
OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
|
||||
ParseCommandLine ();
|
||||
|
||||
for(;;)
|
||||
{
|
||||
ReadLine(line);
|
||||
ExecuteCommand(line);
|
||||
if(bCanLinespace)
|
||||
{
|
||||
printf("\n");
|
||||
} else
|
||||
bCanLinespace = TRUE;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* EOF */
|
|
@ -1,38 +0,0 @@
|
|||
#include <windows.h>
|
||||
#include <reactos/resource.h>
|
||||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD
|
||||
PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x40004L
|
||||
FILETYPE 0x2L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", RES_STR_COMPANY_NAME
|
||||
VALUE "FileDescription", "ReactOS Simple Shell\0"
|
||||
VALUE "FileVersion", RES_STR_FILE_VERSION
|
||||
VALUE "InternalName", "shell\0"
|
||||
VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT
|
||||
VALUE "OriginalFilename", "shell.exe\0"
|
||||
VALUE "ProductName", RES_STR_PRODUCT_NAME
|
||||
VALUE "ProductVersion", RES_STR_PRODUCT_VERSION
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
Loading…
Reference in a new issue