- makefile: use the native headers, don't bother with our hopelessly broken ones
 - tickcount.c: also accept arbitrary tick counts as arguments or from standard input (initially conceived to convert the result of subtracting two Date objects in Javascript - which conveniently happens to be a count of milliseconds - into a human-readable format. Useful to write a batch file that calculates the exact difference between two dates). Also use typedef aliases for __int64 that won't conflict with standard C typedefs

(I had a craving for C code, too much Java for school was melting my brain. Thanks god for good ol' tickcount)
Modified: trunk/reactos/apps/utils/tickcount/makefile
Modified: trunk/reactos/apps/utils/tickcount/tickcount.c

Modified: trunk/reactos/apps/utils/tickcount/makefile
--- trunk/reactos/apps/utils/tickcount/makefile	2005-01-05 19:06:05 UTC (rev 12830)
+++ trunk/reactos/apps/utils/tickcount/makefile	2005-01-05 19:09:38 UTC (rev 12831)
@@ -12,7 +12,7 @@
 
 TARGET_OBJECTS = tickcount.o
 
-TARGET_CFLAGS = -Wall -Werror
+TARGET_CFLAGS = -Wall -Werror -D__USE_W32API
 
 include $(PATH_TO_TOP)/rules.mak
 

Modified: trunk/reactos/apps/utils/tickcount/tickcount.c
--- trunk/reactos/apps/utils/tickcount/tickcount.c	2005-01-05 19:06:05 UTC (rev 12830)
+++ trunk/reactos/apps/utils/tickcount/tickcount.c	2005-01-05 19:09:38 UTC (rev 12831)
@@ -1,30 +1,32 @@
-/* $Id: tickcount.c,v 1.2 2003/07/06 23:04:18 hyperion Exp $
+/* $Id$
 */
 /*
- tickcount -- Display the kernel tick count in human-readable format
+ tickcount -- Display the kernel tick count (or any tick count passed as an
+ argument or as input) in human-readable format
 
  This is public domain software
 */
 
 #include <assert.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <tchar.h>
 #include <windows.h>
 
-typedef __int64 int64_t;
-typedef unsigned __int64 uint64_t;
+typedef __int64 int64_;
+typedef unsigned __int64 uint64_;
 
-#define TICKS_YEAR   (TICKS_DAY * ((uint64_t)365))
-#define TICKS_MONTH  (TICKS_DAY * ((uint64_t)30))
-#define TICKS_WEEK   (TICKS_DAY * ((uint64_t)7))
-#define TICKS_DAY    (TICKS_HOUR * ((uint64_t)24))
-#define TICKS_HOUR   (TICKS_MINUTE * ((uint64_t)60))
-#define TICKS_MINUTE (TICKS_SECOND * ((uint64_t)60))
-#define TICKS_SECOND ((uint64_t)1000)
+#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]))
 
-uint64_t ticks_per_slice[] =
+uint64_ ticks_per_slice[] =
 {
  TICKS_YEAR,
  TICKS_MONTH,
@@ -36,7 +38,7 @@
  1
 };
 
-_TCHAR * slice_names_singular[] =
+_TCHAR * slice_names_singular[SLICES_COUNT] =
 {
  _T("year"),
  _T("month"),
@@ -48,7 +50,7 @@
  _T("millisecond")
 };
 
-_TCHAR * slice_names_plural[] =
+_TCHAR * slice_names_plural[SLICES_COUNT] =
 {
  _T("years"),
  _T("months"),
@@ -62,16 +64,16 @@
 
 void print_uptime
 (
- uint64_t tickcount,
- uint64_t prevsliceval,
+ uint64_ tickcount,
+ uint64_ prevsliceval,
  _TCHAR * prevsliceunit,
  int curslice
 )
 {
- uint64_t tick_cur = tickcount / ticks_per_slice[curslice];
- uint64_t tick_residual = tickcount % ticks_per_slice[curslice];
+ uint64_ tick_cur = tickcount / ticks_per_slice[curslice];
+ uint64_ tick_residual = tickcount % ticks_per_slice[curslice];
 
- assert(tick_cur <= (~((uint64_t)0)));
+ assert(tick_cur <= (~((uint64_)0)));
 
  if(tick_residual == 0)
  {
@@ -134,9 +136,56 @@
  }
 }
 
-int _tmain()
+int parse_print(const _TCHAR * str)
 {
- print_uptime((uint64_t)GetTickCount(), 0, NULL, 0);
+ int64_ tickcount;
+ 
+ tickcount = _ttoi64(str);
+ 
+ if(tickcount < 0)
+  tickcount = - tickcount;
+ else if(tickcount == 0)
+  return 1;
+
+ print_uptime(tickcount, 0, NULL, 0);
  _puttc(_T('\n'), stdout);
+
  return 0;
 }
+
+int _tmain(int argc, _TCHAR * argv[])
+{
+ int r;
+
+ if(argc <= 1)
+ {
+  print_uptime((uint64_)GetTickCount(), 0, NULL, 0);
+  _puttc(_T('\n'), stdout);
+ }
+ else if(argc == 2 && argv[1][0] == _T('-') && argv[1][1] == 0)
+ {
+  while(!feof(stdin))
+  {
+   _TCHAR buf[23];
+   _TCHAR * str;
+
+   str = _fgetts(buf, 22, stdin);
+
+   if(str == NULL)
+    return 0;
+
+   if((r = parse_print(str)) != 0)
+    return r;
+  }
+ }
+ else
+ {
+  int i;
+
+  for(i = 1; i < argc; ++ i)
+   if((r = parse_print(argv[i])) != 0)
+    return r;
+ }
+
+ return 0;
+}