ReactOS 0.4.15-dev-7942-gd23573b
tickcount.c File Reference
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <windows.h>
Include dependency graph for tickcount.c:

Go to the source code of this file.

Macros

#define TICKS_YEAR   (TICKS_DAY * ((uint64_)365))
 
#define TICKS_MONTH   (TICKS_DAY * ((uint64_)30))
 
#define TICKS_WEEK   (TICKS_DAY * ((uint64_)7))
 
#define TICKS_DAY   (TICKS_HOUR * ((uint64_)24))
 
#define TICKS_HOUR   (TICKS_MINUTE * ((uint64_)60))
 
#define TICKS_MINUTE   (TICKS_SECOND * ((uint64_)60))
 
#define TICKS_SECOND   ((uint64_)1000)
 
#define SLICES_COUNT   (sizeof(ticks_per_slice) / sizeof(ticks_per_slice[0]))
 

Typedefs

typedef __int64 int64_
 
typedef unsigned __int64 uint64_
 

Functions

void print_uptime (uint64_ tickcount, uint64_ prevsliceval, _TCHAR *prevsliceunit, int curslice)
 
int parse_print (const _TCHAR *str)
 
int _tmain (int argc, _TCHAR *argv[])
 

Variables

uint64_ ticks_per_slice []
 
_TCHARslice_names_singular [SLICES_COUNT]
 
_TCHARslice_names_plural [SLICES_COUNT]
 

Macro Definition Documentation

◆ SLICES_COUNT

#define SLICES_COUNT   (sizeof(ticks_per_slice) / sizeof(ticks_per_slice[0]))

Definition at line 25 of file tickcount.c.

◆ TICKS_DAY

#define TICKS_DAY   (TICKS_HOUR * ((uint64_)24))

Definition at line 20 of file tickcount.c.

◆ TICKS_HOUR

#define TICKS_HOUR   (TICKS_MINUTE * ((uint64_)60))

Definition at line 21 of file tickcount.c.

◆ TICKS_MINUTE

#define TICKS_MINUTE   (TICKS_SECOND * ((uint64_)60))

Definition at line 22 of file tickcount.c.

◆ TICKS_MONTH

#define TICKS_MONTH   (TICKS_DAY * ((uint64_)30))

Definition at line 18 of file tickcount.c.

◆ TICKS_SECOND

#define TICKS_SECOND   ((uint64_)1000)

Definition at line 23 of file tickcount.c.

◆ TICKS_WEEK

#define TICKS_WEEK   (TICKS_DAY * ((uint64_)7))

Definition at line 19 of file tickcount.c.

◆ TICKS_YEAR

#define TICKS_YEAR   (TICKS_DAY * ((uint64_)365))

Definition at line 17 of file tickcount.c.

Typedef Documentation

◆ int64_

typedef __int64 int64_

Definition at line 14 of file tickcount.c.

◆ uint64_

Definition at line 15 of file tickcount.c.

Function Documentation

◆ _tmain()

int _tmain ( int  argc,
_TCHAR argv[] 
)

Definition at line 154 of file tickcount.c.

155{
156 int r;
157
158 if(argc <= 1)
159 {
161 _puttc(_T('\n'), stdout);
162 }
163 else if(argc == 2 && argv[1][0] == _T('-') && argv[1][1] == 0)
164 {
165 while(!feof(stdin))
166 {
167 _TCHAR buf[23];
168 _TCHAR * str;
169
170 str = _fgetts(buf, 22, stdin);
171
172 if(str == NULL)
173 return 0;
174
175 if((r = parse_print(str)) != 0)
176 return r;
177 }
178 }
179 else
180 {
181 int i;
182
183 for(i = 1; i < argc; ++ i)
184 if((r = parse_print(argv[i])) != 0)
185 return r;
186 }
187
188 return 0;
189}
static int argc
Definition: ServiceArgs.c:12
#define NULL
Definition: types.h:112
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define stdout
Definition: stdio.h:99
_Check_return_ _CRTIMP int __cdecl feof(_In_ FILE *_File)
#define stdin
Definition: stdio.h:98
#define _puttc
Definition: tchar.h:581
#define _fgetts
Definition: tchar.h:565
char _TCHAR
Definition: tchar.h:1392
#define argv
Definition: mplay32.c:18
const WCHAR * str
unsigned __int64 uint64_
Definition: tickcount.c:15
int parse_print(const _TCHAR *str)
Definition: tickcount.c:137
void print_uptime(uint64_ tickcount, uint64_ prevsliceval, _TCHAR *prevsliceunit, int curslice)
Definition: tickcount.c:64
#define _T(x)
Definition: vfdio.h:22

◆ parse_print()

int parse_print ( const _TCHAR str)

Definition at line 137 of file tickcount.c.

138{
139 int64_ tickcount;
140
141 tickcount = _ttoi64(str);
142
143 if(tickcount < 0)
144 tickcount = - tickcount;
145 else if(tickcount == 0)
146 return 1;
147
148 print_uptime(tickcount, 0, NULL, 0);
149 _puttc(_T('\n'), stdout);
150
151 return 0;
152}
#define _ttoi64
Definition: tchar.h:614
__int64 int64_
Definition: tickcount.c:14

Referenced by _tmain().

◆ print_uptime()

void print_uptime ( uint64_  tickcount,
uint64_  prevsliceval,
_TCHAR prevsliceunit,
int  curslice 
)

Definition at line 63 of file tickcount.c.

70{
71 uint64_ tick_cur = tickcount / ticks_per_slice[curslice];
72 uint64_ tick_residual = tickcount % ticks_per_slice[curslice];
73
74 assert(tick_cur <= (~((uint64_)0)));
75
76 if(tick_residual == 0)
77 {
78 /* the current slice is the last */
79
80 if(prevsliceval == 0)
81 {
82 /* the current slice is the only */
84 (
85 _T("%u %s"),
86 (unsigned)tick_cur,
87 (tick_cur == 1 ? slice_names_singular : slice_names_plural)[curslice]
88 );
89 }
90 else
91 {
92 /* the current slice is the last, and there's a previous slice */
93 assert(prevsliceunit);
94
95 /* print the previous and the current slice, and terminate */
97 (
98 _T("%u %s %s %u %s"),
99 (unsigned)prevsliceval,
100 prevsliceunit,
101 _T("and"),
102 (unsigned)tick_cur,
103 (tick_cur == 1 ? slice_names_singular : slice_names_plural)[curslice]
104 );
105 }
106 }
107 else if(tick_cur != 0)
108 {
109 /* the current slice is not the last, and non-zero */
110
111 if(prevsliceval != 0)
112 {
113 /* there's a previous slice: print it */
114 assert(prevsliceunit);
115 _tprintf(_T("%u %s, "), (unsigned)prevsliceval, prevsliceunit);
116 }
117
118 /* recursion on the next slice size, storing the current slice */
120 (
121 tick_residual,
122 tick_cur,
123 (tick_cur == 1 ? slice_names_singular : slice_names_plural)[curslice],
124 curslice + 1
125 );
126 }
127 else
128 {
129 /*
130 the current slice is not the last, and zero: recursion, remembering the
131 previous non-zero slice
132 */
133 print_uptime(tick_residual, prevsliceval, prevsliceunit, curslice + 1);
134 }
135}
#define assert(x)
Definition: debug.h:53
#define _tprintf
Definition: tchar.h:506
_TCHAR * slice_names_plural[SLICES_COUNT]
Definition: tickcount.c:51
_TCHAR * slice_names_singular[SLICES_COUNT]
Definition: tickcount.c:39
uint64_ ticks_per_slice[]
Definition: tickcount.c:27

Referenced by _tmain(), parse_print(), and print_uptime().

Variable Documentation

◆ slice_names_plural

_TCHAR* slice_names_plural[SLICES_COUNT]
Initial value:
=
{
_T("years"),
_T("months"),
_T("weeks"),
_T("days"),
_T("hours"),
_T("minutes"),
_T("seconds"),
}

Definition at line 51 of file tickcount.c.

Referenced by print_uptime().

◆ slice_names_singular

_TCHAR* slice_names_singular[SLICES_COUNT]
Initial value:
=
{
_T("year"),
_T("month"),
_T("week"),
_T("day"),
_T("hour"),
_T("minute"),
_T("second"),
}

Definition at line 39 of file tickcount.c.

Referenced by print_uptime().

◆ ticks_per_slice

uint64_ ticks_per_slice[]
Initial value:
=
{
1
}
#define TICKS_DAY
Definition: tickcount.c:20
#define TICKS_WEEK
Definition: tickcount.c:19
#define TICKS_SECOND
Definition: tickcount.c:23
#define TICKS_HOUR
Definition: tickcount.c:21
#define TICKS_MINUTE
Definition: tickcount.c:22
#define TICKS_MONTH
Definition: tickcount.c:18
#define TICKS_YEAR
Definition: tickcount.c:17

Definition at line 27 of file tickcount.c.

Referenced by print_uptime().