Implement set-time on Windows

db4
Doug Coleman 2010-06-16 17:42:15 -05:00
parent d487a4b045
commit 11d20228f1
5 changed files with 48 additions and 3 deletions

View File

@ -1,6 +1,6 @@
USING: calendar namespaces alien.c-types system USING: calendar namespaces alien.c-types system
windows.kernel32 kernel math combinators windows.errors windows.kernel32 kernel math combinators windows.errors
accessors classes.struct ; accessors classes.struct calendar.format math.functions ;
IN: calendar.windows IN: calendar.windows
M: windows gmt-offset ( -- hours minutes seconds ) M: windows gmt-offset ( -- hours minutes seconds )
@ -11,3 +11,28 @@ M: windows gmt-offset ( -- hours minutes seconds )
{ TIME_ZONE_ID_STANDARD [ Bias>> ] } { TIME_ZONE_ID_STANDARD [ Bias>> ] }
{ TIME_ZONE_ID_DAYLIGHT [ [ Bias>> ] [ DaylightBias>> ] bi + ] } { TIME_ZONE_ID_DAYLIGHT [ [ Bias>> ] [ DaylightBias>> ] bi + ] }
} case neg 60 /mod 0 ; } case neg 60 /mod 0 ;
: timestamp>SYSTEMTIME ( timestamp -- SYSTEMTIME )
{
[ year>> ]
[ month>> ]
[ day-of-week ]
[ day>> ]
[ hour>> ]
[ minute>> ]
[
second>> dup floor
[ nip >integer ]
[ - 1000 * >integer ] 2bi
]
} cleave \ SYSTEMTIME <struct-boa> ;
: SYSTEMTIME>timestamp ( SYSTEMTIME -- timestamp )
{
[ wYear>> ]
[ wMonth>> ]
[ wDay>> ]
[ wHour>> ]
[ wMinute>> ]
[ [ wSecond>> ] [ wMilliseconds>> 1000 /f ] bi + ]
} cleave gmt-offset-duration <timestamp> ;

View File

@ -1800,7 +1800,7 @@ FUNCTION: BOOL SetProcessPriorityBoost ( HANDLE hProcess, BOOL disablePriorityBo
! FUNCTION: SetProcessWorkingSetSize ! FUNCTION: SetProcessWorkingSetSize
! FUNCTION: SetStdHandle ! FUNCTION: SetStdHandle
! FUNCTION: SetSystemPowerState ! FUNCTION: SetSystemPowerState
! FUNCTION: SetSystemTime FUNCTION: BOOL SetSystemTime ( SYSTEMTIME* lpSystemTime ) ;
! FUNCTION: SetSystemTimeAdjustment ! FUNCTION: SetSystemTimeAdjustment
! FUNCTION: SetTapeParameters ! FUNCTION: SetTapeParameters
! FUNCTION: SetTapePosition ! FUNCTION: SetTapePosition

View File

@ -1,7 +1,14 @@
! Copyright (C) 2010 Doug Coleman. ! Copyright (C) 2010 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: system ; USING: combinators kernel system vocabs.loader ;
IN: time IN: time
HOOK: set-time os ( timestamp -- ) HOOK: set-time os ( timestamp -- )
HOOK: adjust-time-monotonic os ( timestamp -- seconds ) HOOK: adjust-time-monotonic os ( timestamp -- seconds )
os {
{ [ dup macosx? ] [ drop "time.macosx" require ] }
{ [ dup windows? ] [ drop "time.windows" require ] }
{ [ dup unix? ] [ drop "time.unix" require ] }
[ drop ]
} cond

View File

@ -0,0 +1 @@
Doug Coleman

View File

@ -0,0 +1,12 @@
! Copyright (C) 2010 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: calendar.windows system time windows.errors
windows.kernel32 kernel classes.struct calendar ;
IN: time.windows
: windows-system-time ( -- SYSTEMTIME )
SYSTEMTIME <struct> [ GetSystemTime ] keep ;
M: windows set-time
>gmt
timestamp>SYSTEMTIME SetSystemTime win32-error=0/f ;