]> gitweb.factorcode.org Git - factor.git/blob - basis/windows/time/time.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / basis / windows / time / time.factor
1 ! Copyright (C) 2007 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types kernel math windows.errors
4 windows.kernel32 windows.types namespaces calendar math.bitwise
5 accessors classes.struct ;
6 IN: windows.time
7
8 : >64bit ( lo hi -- n )
9     32 shift bitor ; inline
10
11 : windows-1601 ( -- timestamp ) 1601 <year-gmt> ;
12
13 : FILETIME>windows-time ( FILETIME -- n )
14     [ dwLowDateTime>> ] [ dwHighDateTime>> ] bi >64bit ;
15
16 : windows-time>timestamp ( n -- timestamp )
17     10000000 /i seconds windows-1601 swap time+ ;
18
19 : windows-time ( -- n )
20     FILETIME <struct> [ GetSystemTimeAsFileTime ] keep
21     FILETIME>windows-time ;
22
23 : timestamp>windows-time ( timestamp -- n )
24     #! 64bit number representing # of nanoseconds since Jan 1, 1601 (UTC)
25     >gmt windows-1601 (time-) 10000000 * >integer ;
26
27 : windows-time>FILETIME ( n -- FILETIME )
28     [ FILETIME <struct> ] dip
29     [ 32 bits >>dwLowDateTime ] [ -32 shift >>dwHighDateTime ] bi ;
30
31 : timestamp>FILETIME ( timestamp -- FILETIME/f )
32     dup [ >gmt timestamp>windows-time windows-time>FILETIME ] when ;
33
34 : FILETIME>timestamp ( FILETIME -- timestamp/f )
35     FILETIME>windows-time windows-time>timestamp ;