Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219/* * 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 VOIDPrintElapsedTime (DWORD time,INT format){ DWORD h,m,s,ms;
TRACE("PrintElapsedTime(%lu, %d)\n", time, format);
switch (format) { case 0: ConOutResPrintf(STRING_TIMER_HELP1, time); break;
case 1: ms = time % 1000; time /= 1000; s = time % 60; time /=60; m = time % 60; h = time / 60; ConOutResPrintf(STRING_TIMER_HELP2, h, cTimeSeparator, m, cTimeSeparator, s, cDecimalSeparator, ms/10); break; }}
INT CommandTimer (LPTSTR param){ // 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) { ConOutResPrintf(STRING_TIMER_HELP3, cTimeSeparator, cTimeSeparator, cDecimalSeparator); return 0; }
nErrorLevel = 0;
p = split (param, &argc, FALSE, 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;
ConOutResPrintf (STRING_TIMER_TIME,clk_n,cS?_T("ON"):_T("OFF")); ConOutPuts(GetTimeString()); freep(p); return 0; }
if (bS) { if (cS) { ConOutResPrintf (STRING_TIMER_TIME,clk_n,cS?_T("ON"):_T("OFF")); ConOutPrintf(_T("%s\n"), GetTimeString()); PrintElapsedTime(GetTickCount()-cT, iFormat); freep(p); return 0; }
cT=GetTickCount(); cS=TRUE; ConOutResPrintf (STRING_TIMER_TIME,clk_n,cS?_T("ON"):_T("OFF")); ConOutPuts(GetTimeString()); freep(p); return 0; }
if (NewClkStatus == NCS_NOT_SPECIFIED) { if (cS) { cS=FALSE; ConOutResPrintf (STRING_TIMER_TIME,clk_n,cS?_T("ON"):_T("OFF")); ConOutPrintf(_T("%s\n"), GetTimeString()); PrintElapsedTime(GetTickCount()-cT, iFormat); freep(p); return 0; }
cT=GetTickCount(); cS=TRUE; ConOutResPrintf (STRING_TIMER_TIME,clk_n,cS?_T("ON"):_T("OFF")); ConOutPuts(GetTimeString()); freep(p); return 0; }
if (NewClkStatus == NCS_OFF) { if (cS) { cS=FALSE; ConOutResPrintf (STRING_TIMER_TIME,clk_n,cS?_T("ON"):_T("OFF")); ConOutPrintf(_T("%s\n"), GetTimeString()); PrintElapsedTime(GetTickCount()-cT, iFormat); freep(p); return 0; } ConOutResPrintf (STRING_TIMER_TIME,clk_n,cS?_T("ON"):_T("OFF")); ConOutPuts(GetTimeString()); freep(p); return 0; }
freep(p); return 0;}
#endif /* INCLUDE_CMD_TIMER */