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 >
Wrap
Text File
|
2003-11-18
|
4KB
|
136 lines
\ File: time.spf
\ Author: Nicholas Nemtsev
\ Date: 08.01.2003
\ Description: Time operations.
\ Words: FILE-TIME:, FILE-ATIME:, FILE-WTIME:, CUR-FTIME, FTIME-, FILE-CHANGE:
\ Usage: FILE-TIME: filename ( -- d )
\ d - is a 64-bit value representing the
\ number of 100-nanosecond intervals since January 1, 1601
\ [RECURSIVE] FILE-CHANGE: "file mask" ( -- ?)
\ Example:
\ CUR-FTIME FILE-TIME: xxx.txt FTIME- 300 > \ curtime-filetime>300sec
\ IF FILE-DELETE: xxx.txt THEN
: FT-OP IF __FFB ftCreationTime 2@ SWAP ELSE 0. THEN ;
: FAT-OP IF __FFB ftLastAccessTime 2@ SWAP ELSE 0. THEN ;
: FWT-OP IF __FFB ftLastWriteTime 2@ SWAP ELSE 0. THEN ;
: FILE-TIME ['] FT-OP FILE-OP ;
: FILE-ATIME ['] FAT-OP FILE-OP ;
: FILE-WTIME ['] FWT-OP FILE-OP ;
: FILE-TIME: eval-string, POSTPONE FILE-TIME ; IMMEDIATE
: FILE-ATIME: eval-string, POSTPONE FILE-ATIME ; IMMEDIATE
: FILE-WTIME: eval-string, POSTPONE FILE-WTIME ; IMMEDIATE
\ USER-CREATE FST /SYSTEMTIME USER-ALLOT
\
\ : CUR-FTIME ( -- d) \ current time as filetime format
\ FST GetSystemTime DROP
\ 0 0 SP@ FST SystemTimeToFileTime ERR THROW
\ SWAP ;
: CUR-FTIME FT-CUR ;
\ :NONAME
\ DNEGATE D+ DUP 0< >R DABS
\ 10000000 ?UM/MOD IF NIP ELSE 2DROP 0 THEN
\ R> IF NEGATE THEN ;
\
\ : FTIME- ( d1 d2 -- sec) \ time difference between two file time in sec
\ LITERAL CATCH IF 2DROP 2DROP 0 THEN ;
: FTIME- FT- FT>SEC D>XS ;
\ ============ FILE-CHANGE =============================
USER FCH-FLAG
USER FCH-NODE
VARIABLE FCH-SEM
VARIABLE FCH-LIST
USER FCH-CH-LIST
0 VALUE FCH
: FCH-NAME S" etc/filechange.txt" ;
: FCH-READ
FCH-SEM GET
FCH-LIST @ 0=
IF
FCH-NAME R/O OPEN-FILE-SHARED
IF DROP
ELSE TO FCH
BEGIN PAD 512 FCH READ-LINE THROW WHILE
PAD SWAP GLOBAL S>ZALLOC FCH-LIST AddNode LOCAL
REPEAT
DROP
FCH CLOSE-FILE DROP
THEN
THEN
FCH-SEM RELEASE
;
: FCH-WRITELN NodeValue ASCIIZ> FCH WRITE-LINE DROP ;
: FCH-WRITE
FCH-SEM GET
FCH-NAME R/W CREATE-FILE-SHARED
IF DROP
ELSE
TO FCH
['] FCH-WRITELN FCH-LIST DoList
FCH CLOSE-FILE DROP
THEN
FCH-SEM RELEASE
;
: FCH-IS-FILE? { a u -- ? }
FCH-LIST
BEGIN @ ?DUP WHILE
DUP NodeValue 17 + ASCIIZ>
a u ICOMPARE 0=
IF NodeValue FCH-NODE ! TRUE EXIT THEN
REPEAT
FALSE
;
: FCH-TIME
BASE @ >R HEX
FCH-NODE @ 16 S>DOUBLE
R> BASE !
;
: FILE-CHANGE ( a u -- ?)
FCH-READ
FCH-SEM GET
FCH-CH-LIST @ IF FCH-CH-LIST FreeList THEN
FCH-CH-LIST 0!
FCH-FLAG OFF
FOR-FILES
FOUND-FULLPATH FCH-IS-FILE? 0=
IF
FOUND-FULLPATH DUP 18 +
GLOBAL ALLOCATE THROW >R
R@ 17 BLANK
[CHAR] 0 R@ C!
R@ 17 + ZPLACE
R@ FCH-NODE !
R> FCH-LIST AddNode LOCAL
THEN
FOUND-FULLPATH FILE-WTIME 2DUP FCH-TIME D<>
IF
BASE @ >R HEX <# 16 0 DO # LOOP #> R> BASE !
FCH-NODE @ SWAP CMOVE
FCH-NODE @ 17 + FCH-CH-LIST AppendNode
FCH-FLAG ON
ELSE
2DROP
THEN
;FOR-FILES
FCH-SEM RELEASE
FCH-FLAG @ DUP IF FCH-WRITE THEN
;
: FILE-CHANGE: eval-string, POSTPONE FILE-CHANGE ; IMMEDIATE