41 lines
1.2 KiB
Factor
41 lines
1.2 KiB
Factor
! Copyright (C) 2007 Doug Coleman.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: alien alien.c-types kernel math windows windows.kernel32
|
|
namespaces calendar math.bitwise ;
|
|
IN: windows.time
|
|
|
|
: >64bit ( lo hi -- n )
|
|
32 shift bitor ;
|
|
|
|
: windows-1601 ( -- timestamp )
|
|
1601 1 1 0 0 0 instant <timestamp> ;
|
|
|
|
: FILETIME>windows-time ( FILETIME -- n )
|
|
[ FILETIME-dwLowDateTime ]
|
|
[ FILETIME-dwHighDateTime ]
|
|
bi >64bit ;
|
|
|
|
: windows-time>timestamp ( n -- timestamp )
|
|
10000000 /i seconds windows-1601 swap time+ ;
|
|
|
|
: windows-time ( -- n )
|
|
"FILETIME" <c-object> [ GetSystemTimeAsFileTime ] keep
|
|
FILETIME>windows-time ;
|
|
|
|
: timestamp>windows-time ( timestamp -- n )
|
|
#! 64bit number representing # of nanoseconds since Jan 1, 1601 (UTC)
|
|
>gmt windows-1601 (time-) 10000000 * >integer ;
|
|
|
|
: windows-time>FILETIME ( n -- FILETIME )
|
|
"FILETIME" <c-object>
|
|
[
|
|
[ [ 32 bits ] dip set-FILETIME-dwLowDateTime ]
|
|
[ [ -32 shift ] dip set-FILETIME-dwHighDateTime ] 2bi
|
|
] keep ;
|
|
|
|
: timestamp>FILETIME ( timestamp -- FILETIME/f )
|
|
dup [ >gmt timestamp>windows-time windows-time>FILETIME ] when ;
|
|
|
|
: FILETIME>timestamp ( FILETIME -- timestamp/f )
|
|
FILETIME>windows-time windows-time>timestamp ;
|