예제 #1
0
//Default handler if no proper handler is located.
VOID  DefaultHandler(LPSTR pstr)
{	
	CD_ChangeLine();
	CD_PrintString(ERROR_STR,FALSE);

	return;
}
예제 #2
0
//打印字符串,cl表示是否换行
VOID CD_PrintString(LPSTR pStr,BOOL cl)
{
#ifdef __I386__
	VGA_PrintString(pStr,FALSE);
	if(cl)
	{
		CD_GotoHome();
		CD_ChangeLine();
	}
#endif

#ifdef __CFG_SYS_CONSOLE
	Console.PrintStr(pStr);
	if(cl == TRUE)
	{
		CD_ChangeLine();
	}
#endif	
}
예제 #3
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);
}
예제 #4
0
void ChangeLine()
{
	CD_ChangeLine();
}
예제 #5
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 BOOL  DoCommand()
{
	__KERNEL_THREAD_OBJECT* hKernelThread = NULL;
	BOOL  bResult                         = FALSE;        //If find the correct command object,then
	static CHAR  szCmdBuffer[CMD_MAX_LEN] = {0};
	DWORD dwIndex                         = 0;          //Used for 'for' loop.
	WORD  CursorX                         = 0;
	WORD  CursorY                         = 0;
	
	
	//µÃµ½ÃüÁîÊäÈë´®
	CD_GetCursorPos(&CursorX,&CursorY);		
	memset(szCmdBuffer,0,sizeof(szCmdBuffer));
	CD_GetString(SHELL_INPUT_START_X,CursorY,szCmdBuffer,sizeof(szCmdBuffer));
	strtrim(szCmdBuffer,TRIM_LEFT|TRIM_RIGHT);
	if(strlen(szCmdBuffer) <= 0)
	{
		return FALSE;
	}
	
	dwIndex = 0;	
	while(CmdObj[dwIndex].CmdStr)
	{
		if(strcmp(szCmdBuffer,CmdObj[dwIndex].CmdStr) == 0)
		{
			CD_ChangeLine();	
			CmdObj[dwIndex].CmdHandler(szCmdBuffer);  //Call the command handler.
			bResult = TRUE;      //Set the flag.
			break;
		}
		dwIndex ++;
	}
	if(bResult)
	{
		goto __END;
	}

	dwIndex = 0;  //Now,should search external command array.
	while(ExtCmdArray[dwIndex].lpszCmdName)
	{
		
		if(strcmp(szCmdBuffer,ExtCmdArray[dwIndex].lpszCmdName) == 0)  //Found.
		{
			CD_ChangeLine();
			hKernelThread = KernelThreadManager.CreateKernelThread(
				(__COMMON_OBJECT*)&KernelThreadManager,
				0,
				KERNEL_THREAD_STATUS_READY,
				PRIORITY_LEVEL_NORMAL,
				ExtCmdArray[dwIndex].ExtCmdHandler,
				(LPVOID)szCmdBuffer, //?
				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);

				KernelThreadManager.DestroyKernelThread(
					(__COMMON_OBJECT*)&KernelThreadManager,
					(__COMMON_OBJECT*)hKernelThread);  //Destroy it.
				//Set focus thread to shell.
				DeviceInputManager.SetFocusThread((__COMMON_OBJECT*)&DeviceInputManager,NULL);
			}
			bResult = TRUE;
			goto __END;
		}
		dwIndex ++;
	}

	if(!bResult)
	{
		DefaultHandler(NULL);        //Call the default command handler.
	}

__END:
		
	His_SaveCmd(s_hHiscmdInoObj,szCmdBuffer);	
	//SaveCmdStr(szCmdBuffer);
	
	return bResult;
}