home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 July / CHIP_CD_2004-07.iso / software / nncron_hit / files / nncron189.exe / plugins / time.spf < prev    next >
Text File  |  2003-11-18  |  4KB  |  136 lines

  1. \ File:         time.spf
  2. \ Author:       Nicholas Nemtsev
  3. \ Date:         08.01.2003
  4. \ Description:  Time operations.
  5. \ Words: FILE-TIME:, FILE-ATIME:, FILE-WTIME:, CUR-FTIME, FTIME-, FILE-CHANGE:
  6. \ Usage: FILE-TIME: filename        ( -- d ) 
  7. \        d - is a 64-bit value representing the 
  8. \        number of 100-nanosecond intervals since January 1, 1601
  9. \        [RECURSIVE] FILE-CHANGE: "file mask"      ( -- ?)
  10. \ Example: 
  11. \ CUR-FTIME FILE-TIME: xxx.txt FTIME- 300 > \ curtime-filetime>300sec
  12. \ IF FILE-DELETE: xxx.txt THEN
  13.  
  14.  
  15.  
  16. : FT-OP  IF __FFB ftCreationTime   2@ SWAP ELSE 0. THEN ;
  17. : FAT-OP IF __FFB ftLastAccessTime 2@ SWAP ELSE 0. THEN ;
  18. : FWT-OP IF __FFB ftLastWriteTime  2@ SWAP ELSE 0. THEN ;
  19. : FILE-TIME  ['] FT-OP FILE-OP ;
  20. : FILE-ATIME ['] FAT-OP FILE-OP ;
  21. : FILE-WTIME ['] FWT-OP FILE-OP ;
  22.  
  23. : FILE-TIME: eval-string, POSTPONE FILE-TIME ; IMMEDIATE
  24. : FILE-ATIME: eval-string, POSTPONE FILE-ATIME ; IMMEDIATE
  25. : FILE-WTIME: eval-string, POSTPONE FILE-WTIME ; IMMEDIATE
  26.  
  27.  
  28. \ USER-CREATE FST /SYSTEMTIME USER-ALLOT
  29. \ : CUR-FTIME ( -- d) \ current time as filetime format
  30. \     FST GetSystemTime DROP
  31. \    0 0 SP@ FST SystemTimeToFileTime ERR THROW
  32. \    SWAP ;
  33.  
  34. : CUR-FTIME  FT-CUR ;
  35.  
  36. \ :NONAME
  37. \    DNEGATE D+ DUP 0< >R DABS
  38. \    10000000 ?UM/MOD IF NIP ELSE 2DROP 0 THEN
  39. \    R> IF NEGATE THEN ;
  40. \ : FTIME- ( d1 d2 -- sec) \ time difference between two file time in sec
  41. \     LITERAL CATCH IF 2DROP 2DROP 0 THEN ;
  42.  
  43. : FTIME- FT- FT>SEC D>XS ;
  44.  
  45. \ ============ FILE-CHANGE =============================
  46.  
  47. USER FCH-FLAG
  48. USER FCH-NODE
  49.  
  50. VARIABLE FCH-SEM
  51. VARIABLE FCH-LIST
  52. USER FCH-CH-LIST
  53.  
  54. 0 VALUE FCH
  55. : FCH-NAME S" etc/filechange.txt" ;
  56.  
  57. : FCH-READ 
  58.     FCH-SEM GET
  59.     FCH-LIST @ 0= 
  60.     IF 
  61.         FCH-NAME R/O OPEN-FILE-SHARED 
  62.         IF DROP 
  63.         ELSE TO FCH
  64.             BEGIN PAD 512 FCH READ-LINE THROW WHILE
  65.                PAD SWAP GLOBAL S>ZALLOC FCH-LIST AddNode LOCAL
  66.             REPEAT
  67.             DROP
  68.             FCH CLOSE-FILE DROP
  69.         THEN
  70.     THEN
  71.     FCH-SEM RELEASE
  72. ;
  73. : FCH-WRITELN NodeValue ASCIIZ> FCH WRITE-LINE DROP ;
  74. : FCH-WRITE
  75.     FCH-SEM GET
  76.     FCH-NAME R/W CREATE-FILE-SHARED 
  77.     IF DROP 
  78.     ELSE 
  79.         TO FCH
  80.         ['] FCH-WRITELN FCH-LIST DoList
  81.         FCH CLOSE-FILE DROP
  82.     THEN
  83.     FCH-SEM RELEASE
  84. ;
  85.  
  86. : FCH-IS-FILE? { a u -- ? }
  87.     FCH-LIST
  88.     BEGIN @ ?DUP WHILE
  89.       DUP NodeValue 17 + ASCIIZ>
  90.       a u ICOMPARE 0=
  91.       IF NodeValue FCH-NODE ! TRUE EXIT THEN
  92.     REPEAT
  93.     FALSE
  94. ;
  95.  
  96. : FCH-TIME 
  97.     BASE @ >R HEX
  98.     FCH-NODE @ 16 S>DOUBLE
  99.     R> BASE !
  100. ;
  101.  
  102. : FILE-CHANGE ( a u -- ?)
  103.     FCH-READ
  104.     FCH-SEM GET
  105.     FCH-CH-LIST @ IF FCH-CH-LIST FreeList THEN
  106.     FCH-CH-LIST 0!
  107.     FCH-FLAG OFF
  108.     FOR-FILES
  109.         FOUND-FULLPATH FCH-IS-FILE? 0=
  110.         IF  
  111.             FOUND-FULLPATH DUP 18 + 
  112.             GLOBAL ALLOCATE THROW >R
  113.             R@ 17 BLANK
  114.             [CHAR] 0 R@ C!
  115.             R@ 17 + ZPLACE
  116.             R@ FCH-NODE !
  117.             R> FCH-LIST AddNode LOCAL
  118.         THEN
  119.         FOUND-FULLPATH FILE-WTIME 2DUP FCH-TIME D<>
  120.         IF
  121.           BASE @ >R HEX    <# 16 0 DO # LOOP #>       R> BASE !
  122.           FCH-NODE @ SWAP CMOVE
  123.           FCH-NODE @ 17 + FCH-CH-LIST AppendNode
  124.           FCH-FLAG ON
  125.         ELSE
  126.           2DROP
  127.         THEN
  128.     ;FOR-FILES
  129.     FCH-SEM RELEASE
  130.     FCH-FLAG @ DUP IF FCH-WRITE THEN
  131. ;
  132.  
  133. : FILE-CHANGE: eval-string, POSTPONE FILE-CHANGE ; IMMEDIATE
  134.