Exemplo n.º 1
0
//
//Entry point of the text mode shell.
//
DWORD ShellEntryPoint(LPVOID pData)
{
	__KERNEL_THREAD_MESSAGE KernelThreadMessage;
	
	s_hHiscmdInoObj = His_CreateHisObj(HISCMD_MAX_COUNT);
	
	StrCpy(DEF_PROMPT_STR,&s_szPrompt[0]);

	CD_PrintString(VERSION_INFO,FALSE);
	CD_SetCursorPos(0,SHELL_INPUT_START_Y_FIRST);
	PrintPrompt();

	while(TRUE)
	{
		if(GetMessage(&KernelThreadMessage))
		{
			if(KERNEL_MESSAGE_TERMINAL == KernelThreadMessage.wCommand)
			{
				break;
			}
			DispatchMessage(&KernelThreadMessage,EventHandler);
		}
	}

	//When reach here,it means the shell thread will terminate.We will reboot
	//the system in current version's implementation,since there is no interact
	//mechanism between user and computer in case of no shell.
	//NOTE:System clean up operations should be put here if necessary.
#ifdef __I386__
	BIOSReboot();
#endif
	return 0;
}
Exemplo n.º 2
0
//Default handler if no proper handler is located.
VOID  DefaultHandler(LPSTR pstr)
{	
	CD_ChangeLine();
	CD_PrintString(ERROR_STR,FALSE);

	return;
}
Exemplo n.º 3
0
//Handler for 'cpu' command.
VOID CpuHandler(LPSTR pstr)
{
	/*GotoHome();
	ChangeLine();
	PrintStr("Cpu Handler called.");*/

	CD_PrintString("Cpu Handler called.",TRUE);
}
Exemplo n.º 4
0
//Handler for 'cpu' command.
DWORD CpuHandler(__CMD_PARA_OBJ* pCmdParaObj)
{
	/*GotoHome();
	ChangeLine();
	PrintStr("Cpu Handler called.");*/

	CD_PrintString("Cpu Handler called.",TRUE);

	return SHELL_CMD_PARSER_SUCCESS;
}
Exemplo n.º 5
0
//Handler for 'runtime' command.
DWORD RunTimeHandler(__CMD_PARA_OBJ* pCmdParaObj)
{
	CHAR  Buffer[190] = {0};
	DWORD week = 0,day = 0,hour = 0,minute = 0,second = 0;
	DWORD* Array[5] = {0};

	second = System.GetSysTick(NULL);  //Get system tick counter.
	//Convert to second.
	second *= SYSTEM_TIME_SLICE;
	second /= 1000;

	if(second >= 60)  //Use minute.
	{
		minute = second / 60;
		second = second % 60;
	}
	if(minute >= 60) //use hour.
	{
		hour   = minute / 60;
		minute = minute % 60;
	}
	if(hour >= 24) //Use day.
	{
		day  = hour / 24;
		hour = hour % 24;
	}
	if(day >= 7) //Use week.
	{
		week = day / 7;
		day  = day % 7;
	}

	Array[0] = &week;
	Array[1] = &day;
	Array[2] = &hour;
	Array[3] = &minute;
	Array[4] = &second;	
	FormString(Buffer,"System has running %d week(s), %d day(s), %d hour(s), %d minute(s), %d second(s).",(LPVOID*)Array);

	//Show out the result.
	/*sprintf(Buffer,"System has running %d week(s), %d day(s), %d hour(s), %d minute(s), %d second(s).",
		week,day,hour,minute,second);*/
	//sprintf(Buffer,"System has running %d,%d",(INT)week,(INT)day);//(INT)hour,(INT)minute,(INT)second
	//PrintLine(Buffer);
	CD_PrintString(Buffer,TRUE);

	return SHELL_CMD_PARSER_SUCCESS;
}
Exemplo n.º 6
0
//Print out command prompt.
static VOID  PrintPrompt()
{	
	WORD  CursorX    = 0;
	WORD  CursorY    = 0;
	
	CD_GetCursorPos(&CursorX,&CursorY);
	if(CursorX != 0)
	{
		CD_ChangeLine();
		CD_GetCursorPos(&CursorX,&CursorY);
	}
	
	CD_PrintString(s_szPrompt,FALSE);
	CursorX = strlen(s_szPrompt);
	CD_SetCursorPos(CursorX,CursorY);
}
Exemplo n.º 7
0
//load history cmd to current cmd line
static  void LoadHisCmd(BOOL bUp)
{
	CHAR   szHisCmd[CMD_MAX_LEN] = {0};
	WORD   CursorX               = 0;
	WORD   CursorY               = 0;
		

	if(His_LoadHisCmd(s_hHiscmdInoObj,bUp,szHisCmd,sizeof(szHisCmd)) == FALSE)
	{
		return; 
	}

	CD_GetCursorPos(&CursorX,&CursorY);
	CD_SetCursorPos(SHELL_INPUT_START_X,CursorY);
	CD_DelString(SHELL_INPUT_START_X,CursorY,CMD_MAX_LEN);
	CD_PrintString(szHisCmd,FALSE);		
}
Exemplo n.º 8
0
//Entry point of the text mode shell.
//
DWORD ShellEntryPoint(LPVOID pData)
{			
	StrCpy(DEF_PROMPT_STR,&s_szPrompt[0]);

	CD_PrintString(VERSION_INFO,TRUE);
	CD_SetCursorPos(0,SHELL_INPUT_START_Y_FIRST);
	
	Shell_Msg_Loop(s_szPrompt,CommandParser,QueryCmdName);

	//When reach here,it means the shell thread will terminate.We will reboot
	//the system in current version's implementation,since there is no interact
	//mechanism between user and computer in case of no shell.
	//NOTE:System clean up operations should be put here if necessary.
#ifdef __I386__
	BIOSReboot();
#endif

	return 0;
}
Exemplo n.º 9
0
//
//Print a string at a new line.
//
VOID PrintLine(LPSTR pszStr)
{
	CD_PrintString(pszStr,TRUE);
}
Exemplo n.º 10
0
void PrintStr(const char* pszMsg)
{
	CD_PrintString((LPSTR)pszMsg,FALSE);
}
Exemplo n.º 11
0
//
//Print a string at a new line.
//
VOID PrintLine(LPSTR pszStr)
{
	CD_PrintString(pszStr,FALSE);
	GotoHome();
	ChangeLine();
}
Exemplo n.º 12
0
//Command analyzing routine,it analyzes user's input and search
//command array to find a proper handler,then call it.
//Default handler will be called if no proper command handler is
//located.
static DWORD  CommandParser(LPSTR pCmdBuf)
{
	__KERNEL_THREAD_OBJECT* hKernelThread = NULL;
	__CMD_PARA_OBJ*         lpCmdParamObj = NULL;
	DWORD   dwResult                      = SHELL_CMD_PARSER_INVALID;        //If find the correct command object,then
	DWORD   dwIndex                       = 0;          //Used for 'for' loop.
	

	lpCmdParamObj = FormParameterObj(pCmdBuf);
	if(NULL == lpCmdParamObj || lpCmdParamObj->byParameterNum < 1)    //Can not form a valid command parameter object.
	{
		CD_PrintString(pCmdBuf,TRUE);
		goto __END;
	}
	
	dwIndex = 0;

	//is bat file?
	if(strstr(lpCmdParamObj->Parameter[0],"./"))
	{
		BatHandler(lpCmdParamObj);
		dwResult = SHELL_CMD_PARSER_SUCCESS;
		goto __END;
	}

	while(CmdObj[dwIndex].CmdStr)
	{
		if(StrCmp(CmdObj[dwIndex].CmdStr,lpCmdParamObj->Parameter[0]))
		{			
			CmdObj[dwIndex].CmdHandler(lpCmdParamObj);  //Call the command handler.
			dwResult = SHELL_CMD_PARSER_SUCCESS;
			break;
		}
		dwIndex ++;
	}

	if(dwResult == SHELL_CMD_PARSER_SUCCESS)
	{
		goto __END;
	}
	
	dwIndex = 0;  //Now,should search external command array.
	while(ExtCmdArray[dwIndex].lpszCmdName)
	{		
		if(StrCmp(ExtCmdArray[dwIndex].lpszCmdName,lpCmdParamObj->Parameter[0]))  //Found.
		{	
			hKernelThread = KernelThreadManager.CreateKernelThread(
				(__COMMON_OBJECT*)&KernelThreadManager,
				0,
				KERNEL_THREAD_STATUS_READY,
				PRIORITY_LEVEL_NORMAL,
				ExtCmdArray[dwIndex].ExtCmdHandler,
				(LPVOID)lpCmdParamObj, //?
				NULL,
				NULL);
			if(!ExtCmdArray[dwIndex].bBackground)  //Should wait.
			{
				DeviceInputManager.SetFocusThread((__COMMON_OBJECT*)&DeviceInputManager,
					(__COMMON_OBJECT*)hKernelThread);  //Give the current input focus to this thread.
				hKernelThread->WaitForThisObject((__COMMON_OBJECT*)hKernelThread);
				DeviceInputManager.SetFocusThread((__COMMON_OBJECT*)&DeviceInputManager,NULL);
				KernelThreadManager.DestroyKernelThread(
					(__COMMON_OBJECT*)&KernelThreadManager,
					(__COMMON_OBJECT*)hKernelThread);  //Destroy it.
				//Set focus thread to shell.
			}
			
			dwResult = SHELL_CMD_PARSER_SUCCESS;
			goto __END;
		}
		dwIndex ++;
	}
	
	//DefaultHandler(NULL); //Call the default command handler.	
__END:

	ReleaseParameterObj(lpCmdParamObj);
	
	return dwResult;		
}