⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 C
字号:
/*
 * TIMER.C - timer internal command.
 *
 * clone from 4nt timer command
 *
 * 20 Aug 1999
 *     started - Paolo Pantaleo <paolopan@freemail.it>
 */

#include <precomp.h>

#ifdef INCLUDE_CMD_TIMER


#define NCS_NOT_SPECIFIED -1
#define NCS_ON 1
#define NCS_OFF 0





//print timer value
#define PT(format) PrintElapsedTime(GetTickCount()-cT,format)


//current timer Time (at wich started to count)
#define cT clksT[clk_n]

//current timer status
#define cS clksS[clk_n]


static VOID
PrintElapsedTime (DWORD time,INT format)
{
	TCHAR szMsg[RC_STRING_MAX_SIZE];
	DWORD h,m,s,ms;

#ifdef _DEBUG
	DebugPrintf(_T("PrintTime(%d,%d)"),time,format);
#endif

	switch (format)
	{
	case 0:
		LoadString(CMD_ModuleHandle, STRING_TIMER_HELP1, szMsg, RC_STRING_MAX_SIZE);
		ConOutPrintf(szMsg, time);
		break;

	case 1:
		ms = time % 1000;
		time /= 1000;
		s = time % 60;
		time /=60;
		m = time % 60;
		h = time / 60;
		LoadString( CMD_ModuleHandle, STRING_TIMER_HELP2, szMsg, RC_STRING_MAX_SIZE);
		ConOutPrintf(szMsg,
		             h, cTimeSeparator,
		             m, cTimeSeparator,
		             s, cDecimalSeparator, ms/10);
		break;
	}
}


INT CommandTimer (LPTSTR cmd, LPTSTR param)
{
	TCHAR szMsg[RC_STRING_MAX_SIZE];

	// all timers are kept
	static DWORD clksT[10];

	// timers status
	// set all the clocks off by default
	static BOOL clksS[10]={FALSE,FALSE,FALSE,FALSE,
		FALSE,FALSE,FALSE,FALSE,FALSE,FALSE};

	// TRUE if /S in command line
	BOOL bS = FALSE;

	// avoid to set clk_n more than once
	BOOL bCanNSet = TRUE;

	INT NewClkStatus = NCS_NOT_SPECIFIED;

	// the clock number specified on the command line
	// 1 by default
	INT clk_n=1;

	// output format
	INT iFormat=1;


	// command line parsing variables
	INT argc;
	LPTSTR *p;

	INT i;

	if (_tcsncmp (param, _T("/?"), 2) == 0)
	{
		LoadString(CMD_ModuleHandle, STRING_TIMER_HELP3, szMsg, RC_STRING_MAX_SIZE);
		ConOutPrintf(szMsg, cTimeSeparator, cTimeSeparator, cDecimalSeparator);
		return 0;
	}

	nErrorLevel = 0;

	LoadString( CMD_ModuleHandle, STRING_TIMER_TIME, szMsg, RC_STRING_MAX_SIZE);

	p = split (param, &argc, FALSE);

	//read options
	for (i = 0; i < argc; i++)
	{
		//set timer on
		if (!(_tcsicmp(&p[i][0],_T("on")))  && NewClkStatus == NCS_NOT_SPECIFIED)
		{
			NewClkStatus = NCS_ON;
			continue;
		}

		//set timer off
		if (!(_tcsicmp(&p[i][0],_T("off"))) && NewClkStatus == NCS_NOT_SPECIFIED)
		{
			NewClkStatus = NCS_OFF;
			continue;
		}

		// other options
		if (p[i][0] == _T('/'))
		{
			// set timer number
			if (_istdigit(p[i][1]) && bCanNSet)
			{
				clk_n = p[i][1] - _T('0');
				bCanNSet = FALSE;
				continue;
			}

			// set s(plit) option
			if (_totupper(p[i][1]) == _T('S'))
			{
				bS = TRUE;
				continue;
			}

			// specify format
			if (_totupper(p[i][1]) == _T('F'))
			{
				iFormat = p[i][2] - _T('0');
				continue;
			}
		}
	}

	// do stuff (start/stop/read timer)
	if(NewClkStatus == NCS_ON)
	{
		cT=GetTickCount();
		cS=TRUE;
		    
        ConOutPrintf (szMsg,clk_n,cS?_T("ON"):_T("OFF"));
        PrintTime();
		freep(p);
		return 0;
	}

	if(bS)
	{
		if(cS)
		{			
            ConOutPrintf (szMsg,clk_n,cS?_T("ON"):_T("OFF"));
            PrintTime();
			PrintElapsedTime(GetTickCount()-cT, iFormat);
			freep(p);
			return 0;
		}

		cT=GetTickCount();
		cS=TRUE;
		ConOutPrintf (szMsg,clk_n,cS?_T("ON"):_T("OFF"));
        PrintTime();
		freep(p);
		return 0;
	}

	if (NewClkStatus == NCS_NOT_SPECIFIED)
	{
		if (cS)
		{
			cS=FALSE;
			ConOutPrintf (szMsg,clk_n,cS?_T("ON"):_T("OFF"));
            PrintTime();
			PrintElapsedTime(GetTickCount()-cT, iFormat);
			freep(p);
			return 0;
		}

		cT=GetTickCount();
		cS=TRUE;
		ConOutPrintf (szMsg,clk_n,cS?_T("ON"):_T("OFF"));
        PrintTime();
		freep(p);
		return 0;
	}


	if (NewClkStatus == NCS_OFF)
	{
		if (cS)
		{
			cS=FALSE;
			ConOutPrintf (szMsg,clk_n,cS?_T("ON"):_T("OFF"));
            PrintTime();
			PrintElapsedTime(GetTickCount()-cT, iFormat);
			freep(p);
			return 0;
		}
		ConOutPrintf (szMsg,clk_n,cS?_T("ON"):_T("OFF"));
        PrintTime();
		freep(p);
		return 0;
	}

	freep(p);
	return 0;
}

#endif /* INCLUDE_CMD_TIMER */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -