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 ;
 |