亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ioctrl_s.cpp

?? 小型的操作系統開發的原代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//***********************************************************************/
//    Author                    : Garry
//    Original Date             : Jun,10 2005
//    Module Name               : IOCTRL_S.CPP
//    Module Funciton           : 
//                                This module countains io control application's implemen-
//                                tation code.
//                                This file countains the shell command or application
//                                code,as it's name has ended by "_S".
//    Last modified Author      :
//    Last modified Date        :
//    Last modified Content     :
//                                1.
//                                2.
//    Lines number              :
//***********************************************************************/

#ifndef __STDAFX_H__
#include "..\INCLUDE\StdAfx.h"
#endif

#ifndef __IOCTRL_S_H__
#include "..\INCLUDE\IOCTRL_S.H"
#endif

//
//The IO control application is used to input or output data to or from IO port.
//This application is very powerful,it can support input/output one byte,one word,
//one byte string or one word string from/into device port.
//The following are it's usage(# is the prompt of this application):
// #inputb io_port    //Input a byte from port,which is indicated by io_port.
// #inputw io_port    //Input a word from port,which is indicated by io_port.
// #inputsb io_port str_len  //Input a byte string from port,which is indicated by io_port,
//                           //str_len is the number of bytes to be inputed.
// #inputsw io_port str_len  //The same as inputsb.
// #outputb io_port   //Output a byte to port.
// #outputw io_port   //Output a word to port.
// #outputsb io_port str_len //Output a byte string to port.
// #outputsw io_port str_len //Output a word string to port.
// #memwb mem_addr data      //Write a byte to the memory address 'mem_addr'.
// #memww mem_addr data      //Write a word to the memory address 'mem_addr'.
// #memwd mem_addr data      //Write a dword to the memory.
// #memrb mem_addr           //Read a byte from memory.
// #memrw mem_addr           //Read a word from memory.
// #memrd mem_addr           //Read a dword from memory.
// #exit                     //Exit this application.
// #help                     //Print help information about this application.
//

//
//IO command handler routine's definition.
//Their implementations can be found at below of this file.
//

static DWORD inputb(__CMD_PARA_OBJ*);
static DWORD inputw(__CMD_PARA_OBJ*);
static DWORD inputd(__CMD_PARA_OBJ*);
static DWORD inputsb(__CMD_PARA_OBJ*);
static DWORD inputsw(__CMD_PARA_OBJ*);

static DWORD outputb(__CMD_PARA_OBJ*);
static DWORD outputw(__CMD_PARA_OBJ*);
static DWORD outputd(__CMD_PARA_OBJ*);
static DWORD outputsb(__CMD_PARA_OBJ*);
static DWORD outputsw(__CMD_PARA_OBJ*);

static DWORD memwb(__CMD_PARA_OBJ*);
static DWORD memww(__CMD_PARA_OBJ*);
static DWORD memwd(__CMD_PARA_OBJ*);

static DWORD memrb(__CMD_PARA_OBJ*);
static DWORD memrw(__CMD_PARA_OBJ*);
static DWORD memrd(__CMD_PARA_OBJ*);

static DWORD memalloc(__CMD_PARA_OBJ*);
static DWORD memrels(__CMD_PARA_OBJ*);
static DWORD help(__CMD_PARA_OBJ*);
static DWORD exit(__CMD_PARA_OBJ*);

//
//The following is a map between IO control command and it's handler.
//IO control application will lookup this map to find appropriate handler by command
//name,and call the handler to handle this IO command.
//

static struct __IOCTRL_COMMAND_MAP{
	LPSTR              lpszCommand;                        //Command string.
	DWORD              (*CommandRoutine)(__CMD_PARA_OBJ*); //Handler.
	LPSTR              lpszHelpInfo;                       //Help information string.
}IOCtrlCmdMap[] = {
	{"inputb",    inputb,      "  inputb io_port             : Input a byte from IO port."},
	{"inputw",    inputw,      "  inputw io_port             : Input a word from IO port."},
	{"inputd",    inputd,      "  inputd io_port             : Input a dword from IO port."},
	{"inputsb",   inputsb,     "  inputsb io_port            : Input a byte string from IO port."},
	{"inputsw",   inputsw,     "  inputsw io_port            : Input a word string from IO port."},
	{"outputb",   outputb,     "  outputb io_port val        : Output a byte to IO port."},
	{"outputw",   outputw,     "  outputw io_port val        : Output a word to IO port."},
	{"outputd",   outputd,     "  outputd io_port val        : Output a dword to IO port."},
	{"outputsb",  outputsb,    "  outputsb io_port size addr : Output a byte string to IO port."},
	{"outputsw",  outputsw,    "  outputsw io_port size addr : Output a word string to IO port."},
	{"memwb",     memwb,       "  memwb addr val             : Write a byte to memory location."},
	{"memww",     memww,       "  memww addr val             : Write a word to memory location."},
	{"memwd",     memwd,       "  memwd addr val             : Write a dword to memory location."},
	{"memrb",     memrb,       "  memrb addr                 : Read a byte from memory."},
	{"memrw",     memrw,       "  memrw addr                 : Read a word from memory."},
	{"memrd",     memrd,       "  memrd addr                 : Read a dword from memory."},
	{"memalloc",  memalloc,    "  memalloc                   : Allocate a block of memory."},
	{"memrels",   memrels,     "  memrels addr               : Release the memory allocated by memalloc."},
	{"help",      help,        "  help                       : Print out this screen."},
	{"exit",      exit,        "  exit                       : Exit from this application."},
	{NULL,        NULL,        NULL}                 //End of the map.
};

//
//The following routine is used to print a prompt.
//

static VOID PrintPound()
{
	WORD  wr = 0x0700;
	
	wr += '#';
	ChangeLine();
	GotoHome();
	PrintCh(wr);
}

//
//The following is the entry point of IO control application.
//This routine does the following:
// 1. Get input message from kernel thread message queue,by calling GetMessage;
// 2. If the message is a key down event,and the key is ENTRER,then process the command;
// 3. Form a command parameter object by calling FormParameterObj;
// 4. Lookup the IO command and handler's map,to find appropriate handler;
// 5. Call the handler,command parameter as the handler's parameter;
// 6. If the hander returns IOCTRL_TERMINAL,then exit the application;
// 7. Otherwise,continue the loop.
//

static BYTE strCmdBuffer[MAX_BUFFER_LEN] = {0};  //Command buffer.
DWORD IoCtrlStart(LPVOID)
{
	DWORD                    dwCurrentPtr       = 0L;
	__KERNEL_THREAD_MESSAGE  Msg;
	BYTE                     bt;
	WORD                     wr                 = 0x0700;
	DWORD                    dwMapIndex         = 0L;
	BOOL                     bValidCmd          = FALSE;
	__CMD_PARA_OBJ*          lpParamObj         = NULL;
	DWORD                    dwRetVal           = 0L;

	PrintPound();            //Print out the prompt of this application.

	while(TRUE)
	{
		if(GetMessage(&Msg))
		{
			if(MSG_KEY_DOWN == Msg.wCommand)  //This is a key down event.
			{
				bt = LOBYTE(LOWORD(Msg.dwParam));
				if(VK_RETURN == bt)    //The ENTER key is pressed.
				{
					strCmdBuffer[dwCurrentPtr] = 0;  //Set the end flag.
					dwCurrentPtr               = 0;  //Set the pointer to begin.
					//
					//The following code handles the command.
					//

					lpParamObj = FormParameterObj(&strCmdBuffer[0]);
					if(NULL == lpParamObj)    //Can not create parameter object.
					{
						PrintLine("Fatal error occurs,application exit.");
						goto __TERMINAL;    //Exit the application.
					}
					if(0 != lpParamObj->byParameterNum)  //Valid parameter(s) exits.
					{
						while(IOCtrlCmdMap[dwMapIndex].lpszCommand)
						{
							if(StrCmp(IOCtrlCmdMap[dwMapIndex].lpszCommand,
								lpParamObj->Parameter[0]))
							{
								bValidCmd = TRUE;    //Find the valid command.
								break;
							}
							dwMapIndex ++;
						}
						if(bValidCmd)  //Handle the command.
						{
							dwRetVal = IOCtrlCmdMap[dwMapIndex].CommandRoutine(lpParamObj);
						}
						else
						{
							PrintLine("Unrecognized command.");
						}
					}

					bValidCmd      = FALSE;
					dwMapIndex     = 0L;
					ReleaseParameterObj(lpParamObj);  //Release the parameter object.
					if(IOCTRL_TERMINAL == dwRetVal)
						goto __TERMINAL;
					PrintPound();
				}
				else
				if(VK_BACKSPACE == bt)  //Delete one character.
				{
					if(dwCurrentPtr)
					{
						dwCurrentPtr --;
						GotoPrev();    //Erase one character from screen.
					}
				}
				else  //This only a normal key down event.
				{
					if(dwCurrentPtr < MAX_BUFFER_LEN)  //If the buffer is not overflow.
					{
						strCmdBuffer[dwCurrentPtr] = bt;
						dwCurrentPtr ++;
						wr += bt;
						PrintCh(wr);                   //Print the character to screen.
						wr  = 0x0700;                  //Restore the chatacter's display
						                               //attribute.
					}
				}
			}
		}
	}

__TERMINAL:
	return 0L;
}

//
//The following are the implementations of all command handler.
//The handler's name is the same as command.
//
static DWORD inputb(__CMD_PARA_OBJ* lpCmdObj)
{
	WORD           wInputPort         = 0;
	UCHAR          bt                 = 0;
	DWORD          dwInputPort        = 0L;
	BYTE           strBuffer[15]      = {0};

	if(NULL == lpCmdObj)  //Parameter check.
		return IOCTRL_TERMINAL;

	if(lpCmdObj->byParameterNum < 2)  //Two small parameters.
	{
		PrintLine("Please input the port where to read.");
		return IOCTRL_NORMAL;
	}
	if(!Str2Hex(lpCmdObj->Parameter[1],&dwInputPort))  //Convert the string value to hex.
	{
		PrintLine("Invalid port value.");
		return IOCTRL_NORMAL;
	}

	wInputPort = LOWORD(dwInputPort);  //Now,wInputPort contains the port number.
	ReadByteFromPort(&bt,wInputPort);  //Read one byte from port.

	dwInputPort =  0;
	dwInputPort += bt;

	strBuffer[0] = ' ';
	strBuffer[1] = ' ';
	strBuffer[2] = ' ';
	strBuffer[3] = ' ';

	Hex2Str(dwInputPort,&strBuffer[4]);
	PrintLine(strBuffer);    //Print out the byte.

	return 0L;
}

static DWORD inputw(__CMD_PARA_OBJ* lpCmdObj)
{
	WORD           wInputPort         = 0;
	WORD           wr                 = 0;
	DWORD          dwInputPort        = 0L;
	BYTE           strBuffer[15]      = {0};

	if(NULL == lpCmdObj)  //Parameter check.
		return IOCTRL_TERMINAL;

	if(lpCmdObj->byParameterNum < 2)  //Two small parameters.
	{
		PrintLine("Please input the port where to read.");
		return IOCTRL_NORMAL;
	}
	if(!Str2Hex(lpCmdObj->Parameter[1],&dwInputPort))  //Convert the string value to hex.
	{
		PrintLine("Invalid port value.");
		return IOCTRL_NORMAL;
	}

	wInputPort = LOWORD(dwInputPort);  //Now,wInputPort contains the port number.
	ReadWordFromPort(&wr,wInputPort);  //Read one byte from port.

	dwInputPort =  0;
	dwInputPort += wr;

	strBuffer[0] = ' ';
	strBuffer[1] = ' ';
	strBuffer[2] = ' ';
	strBuffer[3] = ' ';

	Hex2Str(dwInputPort,&strBuffer[4]);
	PrintLine(strBuffer);    //Print out the byte.

	return 0L;
}

//
//The implementation of inputd.
//

static DWORD inputd(__CMD_PARA_OBJ* lpParamObj)
{
	DWORD                dwVal              = 0L;
	WORD                 wPort              = 0;
	BYTE                 strBuffer[15];

	if(NULL == lpParamObj)    //Parameter check.
		return IOCTRL_TERMINAL;

	if(lpParamObj->byParameterNum < 2)    //Not enough parameters.
	{
		PrintLine("Please input the port value.");
		return IOCTRL_NORMAL;
	}

	if(!Str2Hex(lpParamObj->Parameter[1],&dwVal))  //Incorrect port value.
	{
		PrintLine("Please input the port correctly.");
		return IOCTRL_NORMAL;
	}

	wPort = LOWORD(dwVal);

#ifdef __I386               //Read data from port.
	__asm{
		push eax
		push edx
		mov dx,wPort
		in eax,dx
		mov dwVal,eax
		pop edx
		pop eax
	}
#elif
#endif

	strBuffer[0] = ' ';
	strBuffer[1] = ' ';
	strBuffer[2] = ' ';
	strBuffer[3] = ' ';

	Hex2Str(dwVal,&strBuffer[4]);
	PrintLine(strBuffer);    //Print out the byte.

	return 0L;
}

static DWORD inputsb(__CMD_PARA_OBJ* lpCmdObj)
{
	PrintLine("inputsb is handled.");
	return 0L;
}

static DWORD inputsw(__CMD_PARA_OBJ* lpCmdObj)
{
	return 0L;
}

static DWORD outputb(__CMD_PARA_OBJ* lpCmdObj)
{
	UCHAR            bt         = 0;
	WORD             wPort      = 0;
	DWORD            dwPort     = 0;

	if(NULL == lpCmdObj)  //Parameter check.
		return IOCTRL_TERMINAL;

	if(lpCmdObj->byParameterNum < 3)  //Not enough parameters.
	{
		PrintLine("Please input the port and value.");
		return IOCTRL_NORMAL;
	}
	if(!Str2Hex(lpCmdObj->Parameter[1],&dwPort))

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚瑟在线精品视频| 蜜臀91精品一区二区三区| 婷婷夜色潮精品综合在线| 国产成人精品影视| 欧美疯狂性受xxxxx喷水图片| 国产亚洲制服色| 另类小说图片综合网| 99精品久久99久久久久| wwwwww.欧美系列| 奇米综合一区二区三区精品视频| 99久久综合国产精品| 久久久无码精品亚洲日韩按摩| 五月天一区二区三区| 色88888久久久久久影院野外| 精品国产乱码久久久久久1区2区| 亚洲午夜激情av| 成人av电影在线网| 国产欧美精品一区| 国内久久精品视频| 91福利社在线观看| 亚洲黄色尤物视频| 成a人片亚洲日本久久| 国产欧美日韩不卡免费| 国产激情视频一区二区三区欧美 | 成人性视频免费网站| 日韩欧美一区在线观看| 三级在线观看一区二区| 欧美日韩美少妇| 亚洲高清三级视频| 日本久久一区二区| 亚洲黄色av一区| 欧美羞羞免费网站| 亚洲第一电影网| 欧美剧情电影在线观看完整版免费励志电影 | 91色.com| 国产精品视频一二三| 国产激情视频一区二区在线观看 | 国产91丝袜在线观看| 国产日韩欧美在线一区| 成人av在线影院| 18成人在线观看| 色婷婷综合久久久中文一区二区| 中文字幕日韩一区| 色狠狠桃花综合| 亚洲国产一区二区三区| 欧美二区在线观看| 国产最新精品免费| 中文字幕不卡在线观看| www.亚洲色图| 亚洲一级在线观看| 日韩午夜激情av| 国产福利一区二区三区| 欧美国产精品专区| 欧日韩精品视频| 日本午夜精品视频在线观看| 久久夜色精品一区| 99在线精品视频| 亚洲国产精品天堂| 久久久久久久久久久久久久久99 | 亚洲卡通欧美制服中文| 777精品伊人久久久久大香线蕉| 极品瑜伽女神91| 亚洲欧美乱综合| 日韩欧美亚洲一区二区| 国产大陆a不卡| 亚洲成人手机在线| 久久欧美一区二区| 91久久国产最好的精华液| 美女mm1313爽爽久久久蜜臀| 日本一区二区三区四区在线视频| 在线观看不卡视频| 狠狠色狠狠色合久久伊人| 亚洲日本va在线观看| 欧美一区二区三区男人的天堂| 成人国产一区二区三区精品| 日韩经典一区二区| 国产精品美女久久福利网站| 欧美乱妇20p| 91视视频在线观看入口直接观看www| 亚洲一区在线观看视频| 久久久久久久久久久黄色| 欧美色图第一页| 成人免费av资源| 另类小说欧美激情| 亚洲一区二区三区在线播放| 久久久久久久久伊人| 欧美一区二区性放荡片| 在线免费亚洲电影| 成人自拍视频在线观看| 另类小说图片综合网| 亚洲电影第三页| 自拍av一区二区三区| 欧美精品一区二区精品网| 日本福利一区二区| 粉嫩欧美一区二区三区高清影视| 无吗不卡中文字幕| 一区二区高清在线| 综合激情网...| 中文字幕乱码久久午夜不卡 | 欧美综合久久久| av在线这里只有精品| 国产黄色精品网站| 久久国产综合精品| 日本欧美肥老太交大片| 亚洲18影院在线观看| 亚洲免费在线观看| 中文字幕一区二区三中文字幕| 久久亚洲二区三区| 精品成人免费观看| 日韩欧美你懂的| 精品久久久久久亚洲综合网| 日韩欧美国产一区二区在线播放| 欧美另类高清zo欧美| 欧美一级艳片视频免费观看| 欧美乱妇15p| 日韩亚洲国产中文字幕欧美| 欧美日韩国产不卡| 欧美疯狂性受xxxxx喷水图片| 538prom精品视频线放| 9191久久久久久久久久久| 欧美猛男超大videosgay| 欧美日本不卡视频| 日韩午夜激情av| 久久免费视频色| 国产精品视频一二三| 亚洲精品乱码久久久久久久久 | 欧美一三区三区四区免费在线看| 欧美日韩中文一区| 欧美丰满美乳xxx高潮www| 日韩一区二区三区视频在线 | 一区二区在线观看视频| 亚洲一线二线三线视频| 全部av―极品视觉盛宴亚洲| 国产资源精品在线观看| 国产成人午夜精品5599| 91视频在线看| 欧美日韩精品欧美日韩精品一 | 欧美日韩一级二级三级| 欧美日本韩国一区| 国产视频视频一区| 亚洲人成亚洲人成在线观看图片| 亚洲自拍偷拍图区| 蜜桃一区二区三区四区| 成人网在线播放| 欧美视频日韩视频| 日韩午夜三级在线| 亚洲婷婷国产精品电影人久久| 亚洲国产精品一区二区尤物区| 另类小说欧美激情| www.亚洲国产| 欧美一级欧美三级在线观看| 日本一区二区三区在线不卡| 亚洲国产成人精品视频| 精品在线亚洲视频| 日本乱人伦一区| 久久亚洲一级片| 亚洲电影一级黄| 成人av在线资源网| 日韩精品影音先锋| 亚洲一卡二卡三卡四卡五卡| 国产乱国产乱300精品| 欧美三级韩国三级日本一级| 国产午夜精品一区二区三区嫩草| 亚洲女性喷水在线观看一区| 国产真实精品久久二三区| 欧美视频在线一区二区三区 | av在线免费不卡| 精品国免费一区二区三区| 亚洲黄色免费电影| 国产v综合v亚洲欧| 日韩一级片网站| 亚洲成人免费视频| 91欧美一区二区| 国产精品视频在线看| 国产在线播精品第三| 欧美久久久一区| 亚洲精品高清在线观看| 国产99久久久国产精品潘金网站| 欧美一区二区视频免费观看| 亚洲自拍偷拍综合| 色视频欧美一区二区三区| 日本一二三四高清不卡| 久久99国产精品免费网站| 欧美日韩的一区二区| 夜夜夜精品看看| 色综合天天综合网天天狠天天 | 亚洲精品一区二区三区蜜桃下载| 视频在线在亚洲| 欧美日韩亚州综合| 亚洲一区二区三区四区在线| 色综合天天性综合| 亚洲欧美在线观看| 99久久er热在这里只有精品15| 国产精品欧美久久久久无广告| 国产精品一区二区在线播放| 精品少妇一区二区三区免费观看| 日韩成人dvd| 欧美一级夜夜爽| 精品亚洲aⅴ乱码一区二区三区| 欧美v亚洲v综合ⅴ国产v|