47 lines
1.3 KiB
Factor
47 lines
1.3 KiB
Factor
USING: arrays kernel libs-io sequences prettyprint unix-internals
|
|
calendar namespaces math ;
|
|
USE: io
|
|
IN: shell
|
|
|
|
TUPLE: unix-shell ;
|
|
|
|
T{ unix-shell } \ shell set-global
|
|
|
|
TUPLE: file name mode nlink uid gid size mtime symbol ;
|
|
|
|
M: unix-shell directory* ( path -- seq )
|
|
dup (directory) [ tuck >r "/" r> 3append stat* 2array ] map-with ;
|
|
|
|
M: unix-shell make-file ( path -- file )
|
|
first2
|
|
[ stat-mode ] keep
|
|
[ stat-nlink ] keep
|
|
[ stat-uid ] keep
|
|
[ stat-gid ] keep
|
|
[ stat-size ] keep
|
|
[ stat-mtime timespec>timestamp >local-time ] keep
|
|
stat-mode mode>symbol <file> ;
|
|
|
|
M: unix-shell file. ( file -- )
|
|
[ [ file-mode >oct write ] keep ] with-cell
|
|
[ bl ] with-cell
|
|
[ [ file-nlink unparse write ] keep ] with-cell
|
|
[ bl ] with-cell
|
|
[ [ file-uid unparse write ] keep ] with-cell
|
|
[ bl ] with-cell
|
|
[ [ file-gid unparse write ] keep ] with-cell
|
|
[ bl ] with-cell
|
|
[ [ file-size unparse write ] keep ] with-cell
|
|
[ bl ] with-cell
|
|
[ [ file-mtime file-time-string write ] keep ] with-cell
|
|
[ bl ] with-cell
|
|
[ file-name write ] with-cell ;
|
|
|
|
USE: unix-internals
|
|
M: unix-shell touch-file ( path -- )
|
|
dup open-append dup -1 = [
|
|
drop now dup set-file-times
|
|
] [
|
|
nip [ now dup set-file-times* ] keep close
|
|
] if ;
|