home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 July / CHIP_CD_2004-07.iso / software / nncron_hit / files / nncron189.exe / plugins / timesync.spf < prev    next >
Text File  |  2004-01-08  |  3KB  |  127 lines

  1. \ File:         timesync.spf
  2. \ Author:       Nicholas Nemtsev
  3. \ Date:         11.04.2002
  4. \ Modified:     08.01.2004 (leap-year bug)
  5. \ Description:  Time synchronization by Time Protocol
  6.  
  7. \ Usage: TP-SYNC: server-name
  8. \ user-value variables (use these after TP-SYNC):
  9. \       TP-SYNC-RESULT - 0 if ok, otherwise winsock error code
  10. \       TP-SYNC-DELAY  - delay of server respond in ms
  11. \ Note: You must perform authorization. And user must have
  12. \       "Change the system time" privilege.
  13.  
  14. \ --- Example: ---
  15. \ #( time_adjust
  16. \ OnceADay
  17. \ Rule: ONLINE?
  18. \ Action:
  19. \     TP-SYNC: time.nist.gov
  20. \     TP-SYNC-RESULT 0<>
  21. \     IF CLEAR-ONCE 
  22. \        MSG: "Can't synchronize time"
  23. \     ELSE
  24. \        TMSG: "Time is synchronized." 10
  25. \     THEN
  26. \ )#
  27.  
  28.  
  29. \ --- Time server list ---
  30. \ time.nist.gov
  31. \ clock.psu.edu
  32. \ finch.cc.ukans.edu
  33. \ ntp.css.gov
  34. \ ntp.lth.se
  35. \ ntp.maths.tcd.ie
  36. \ ntp0.cornell.edu
  37. \ ntp-1.ece.cmu.edu
  38. \ ntp-2.ece.cmu.edu
  39. \ ntp2a.mcc.ac.uk
  40. \ Rolex.PeachNet.EDU
  41. \ salmon.maths.tcd.ie
  42. \ sundial.columbia.edu
  43. \ time.nrc.ca
  44. \ timelord.uregina.ca
  45. \ timex.cs.columbia.edu
  46. \ Timex.PeachNet.EDU
  47.  
  48. DECIMAL 
  49.  
  50. USER-VALUE TP-SYNC-RESULT
  51. USER-VALUE TP-SYNC-DELAY
  52.  
  53. WINAPI: SetSystemTime KERNEL32.DLL
  54.  
  55. USER <time>
  56.  
  57. : TCHGORD
  58.     <time> C@     <time> 1+ C@    <time> 2+ C@    <time> 3 + C@  
  59.     <time> C!     <time> 1+ C!    <time> 2+ C!    <time> 3 + C!
  60. ;
  61.  
  62. : UT>TIME { u \ d m y leap? -- s m h d m y }
  63.     u 0 60 UM/MOD 
  64.     60 /MOD
  65.     24 /MOD 
  66.     1461 /MOD 4 * TO y 365 /MOD DUP 0= TO leap? y + 1900 + TO y
  67.     1+ leap? IF 1+ THEN
  68.     1 TO m
  69.     13 1
  70.     DO  y I MonLength \ 2DUP . . CR
  71.         2DUP > 
  72.         IF - m 1+ TO m 
  73.         ELSE DROP TO d LEAVE THEN
  74.     LOOP
  75.     d  m  y 
  76. ;
  77.  
  78. : (GET-TIME) { a u \ s delay -- s m h d m y delay }
  79.     SocketsStartup THROW
  80.     CreateSocket THROW TO s
  81. \    CreateUdpSocket THROW TO s
  82. \    5 s SetSocketTimeout THROW
  83.     a u GetHostIP THROW
  84.     GetTickCount SWAP
  85.     37 s ConnectSocket THROW
  86.     <time> 4 s ReadSocket THROW DROP
  87.     GetTickCount SWAP -  TO delay \ . CR
  88.     s CloseSocket THROW
  89.     SocketsCleanup THROW
  90.     TCHGORD
  91.     <time> @ UT>TIME
  92.     delay
  93. \    . . . . . .
  94. \    GET-CUR-TIME ." --- " Min@ . Sec@ . CR
  95. ;
  96.  
  97. : GET-TIME ( a u \ s delay -- s m h d m y delay =t | ior =f )
  98.     ['] (GET-TIME) CATCH ?DUP 
  99.     IF >R 2DROP R> FALSE ELSE TRUE THEN
  100. ;
  101.  
  102. : TP-SYNC ( a u -- )
  103.     0 TO TP-SYNC-RESULT
  104.     GET-TIME 
  105.     IF
  106.         TO TP-SYNC-DELAY
  107.  
  108.         /SYSTEMTIME RALLOT >R
  109.         R@ wYear W!     R@ wMonth W!    R@ wDay W!      
  110.         R@ wHour W!     R@ wMinute W!   R@ wSecond W!
  111.         TP-SYNC-DELAY 2000 <
  112.         IF
  113. \            S" SeSystemtimePrivilege" PrivOn DROP
  114.             R@ SetSystemTime DROP ( ERR ." SetSystemTime=" . CR)
  115.         ELSE 102 TO TP-SYNC-RESULT THEN
  116.         RDROP
  117.         /SYSTEMTIME RFREE
  118.     ELSE
  119.         TO TP-SYNC-RESULT
  120.     THEN
  121. ;
  122.  
  123. C" eval-string," FIND NIP
  124. [IF]
  125. : TP-SYNC: eval-string, POSTPONE TP-SYNC ; IMMEDIATE
  126. [THEN]
  127.