1 ! Copyright (C) 2007 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien alien.c-types calendar calendar.private
4 classes.struct kernel math math.bitwise namespaces
5 windows.errors windows.handles windows.kernel32 windows.types ;
8 : >64bit ( lo hi -- n )
9 32 shift bitor ; inline
11 : windows-1601 ( -- timestamp ) 1601 <year-gmt> ;
13 : FILETIME>windows-time ( FILETIME -- n )
14 [ dwLowDateTime>> ] [ dwHighDateTime>> ] bi >64bit ;
16 : windows-time>timestamp ( n -- timestamp )
17 [ windows-1601 ] dip 10,000,000 /i +second ;
19 : windows-time ( -- n )
20 FILETIME new [ GetSystemTimeAsFileTime ] keep
21 FILETIME>windows-time ;
23 : timestamp>windows-time ( timestamp -- n )
24 ! 64bit number representing # of nanoseconds since Jan 1, 1601 (UTC)
25 >gmt windows-1601 (time-) 10,000,000 * >integer ;
27 : windows-time>FILETIME ( n -- FILETIME )
29 [ 32 bits >>dwLowDateTime ] [ -32 shift >>dwHighDateTime ] bi ;
31 : timestamp>FILETIME ( timestamp -- FILETIME/f )
32 dup [ >gmt timestamp>windows-time windows-time>FILETIME ] when ;
34 : FILETIME>timestamp ( FILETIME -- timestamp/f )
35 FILETIME>windows-time windows-time>timestamp ;