184 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
The structure DIR-STREAMS defines procedures to represent and process
 | 
						|
directories as streams of files and sub-directories. Using a lazy data
 | 
						|
structure to represent directories allows the library to minimize
 | 
						|
access to the file system. Files within streams are represented by the
 | 
						|
data type FS-OBJECT which essentially extends scsh's FILE-INFO type by
 | 
						|
a field for the file name.
 | 
						|
 | 
						|
In addition the structure STREAM provides a library for stream
 | 
						|
processing but we intend to replace this library with SRFI-40
 | 
						|
soon. This is also the reason for the lack of documentation for the
 | 
						|
STREAM package.
 | 
						|
 | 
						|
================================================================================
 | 
						|
 | 
						|
After installation, use the switch
 | 
						|
 | 
						|
-lel dir-streams/load.scm
 | 
						|
 | 
						|
to load this library.
 | 
						|
 | 
						|
================================================================================
 | 
						|
 | 
						|
(dir-stream-from-dir-name dir-name [chase?] [parent]) -> dir-stream
 | 
						|
 | 
						|
Constructor for dir-streams. The CHASE? option indicates whether
 | 
						|
symbolic links should be followed or not and defaults to #t. PARENT is
 | 
						|
the directory relative to which DIR-NAME should be interpreted. It
 | 
						|
defaults to "" and is only mildly useful.
 | 
						|
 | 
						|
 | 
						|
(dir-stream? thing) -> boolean
 | 
						|
 | 
						|
Type predicate for dir-streams.
 | 
						|
 | 
						|
 | 
						|
(dir-stream-info dir-stream) -> fs-object
 | 
						|
 | 
						|
Returns the fs-object corresponding to the directory.
 | 
						|
 | 
						|
 | 
						|
(fs-object? thing) -> boolean
 | 
						|
 | 
						|
Type predicate for file-objects.
 | 
						|
 | 
						|
 | 
						|
(fs-object-parent fs-object) -> string
 | 
						|
 | 
						|
The parent directory of the fs-object.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
(fs-object-name fs-object) -> string
 | 
						|
 | 
						|
The file name of FS-OBJECT.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
(fs-object-info fs-object) -> file-info
 | 
						|
 | 
						|
The file-info record of FS-OBJECT.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
(fs-object-file-name fs-object) -> string
 | 
						|
 | 
						|
The path of FS-OBJECT.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
(dir-stream-files-stream dir-stream) -> fs-object stream
 | 
						|
 | 
						|
A stream of the fs-objects of the files within the directory
 | 
						|
represented by DIR-STREAM.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
(dir-stream-subdir-stream dir-stream) -> dir-stream stream 
 | 
						|
 | 
						|
A stream of dir-streams of the subdirectories within the directory
 | 
						|
represented by DIR-STREAM.
 | 
						|
 | 
						|
 | 
						|
(dir-stream-filter dir-stream file-pred dir-pred) -> dir-stream
 | 
						|
 | 
						|
Applies the predicate DIR-PRED to all the subdirectories and FILE-PRED
 | 
						|
to all the files within directory. The returned stream contains only
 | 
						|
the files and subdirectories for which the predicates return #t.
 | 
						|
 | 
						|
 | 
						|
(dir-stream-fold-right ds make-dir-stream
 | 
						|
		       files-make-stream files-stream-empty 
 | 
						|
		       subdirs-make-stream subdirs-empty) -> return type of make-dir-stream
 | 
						|
 | 
						|
Replaces the constructors of the dir-stream by the supplied procedures.
 | 
						|
Example:
 | 
						|
(define (disc-usage ds)
 | 
						|
  (dir-stream-fold-right ds (lambda (fso sum subdirs) (list (fs-object-filename fso)
 | 
						|
							    (apply + sum (map cadr subdirs))
 | 
						|
							    subdirs))
 | 
						|
			 (lambda (fso accu)
 | 
						|
			   (+ accu (file-info:size (fs-object-info fso))))
 | 
						|
			 0
 | 
						|
			 cons
 | 
						|
			 '()))
 | 
						|
 | 
						|
 | 
						|
(dir-stream-map dir-stream file-f dir-f) -> dir-stream
 | 
						|
 | 
						|
Applies FILE-F to all files in DIR-STREAM and DIR-F to all directories
 | 
						|
in DIR-STREAM and returns the resulting dir-stream.
 | 
						|
 | 
						|
 | 
						|
(dir-stream-filter-map dir-stream file-f dir-f) -> dir-stream
 | 
						|
 | 
						|
Applies FILE-F to all files in DIR-STREAM and DIR-F to all directories
 | 
						|
in DIR-STREAM and returns the dir-stream containing all the non-false
 | 
						|
results of FILE-F and DIR-F.
 | 
						|
 | 
						|
 | 
						|
(dir-stream-for-each dir-stream file-f dir-f) -> unspecific
 | 
						|
 | 
						|
Applies FILE-F to all files in DIR-STREAM and DIR-F to all directories
 | 
						|
in DIR-STREAM.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
The structure DIR-STREAM-PREDICATES defines some predicates the user
 | 
						|
might find useful when programming with dir-streams. 
 | 
						|
 | 
						|
(fs-object-size-less-than? fs-object size) -> {#t, #f}
 | 
						|
(fs-object-size-greater-than? fs-object size) -> {#t, #f}
 | 
						|
 | 
						|
Check whether the lenght of the file represented by FS-OBJECT is
 | 
						|
less/more than SIZE bytes.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
(days->seconds days) -> integer
 | 
						|
(hours->seconds hours) -> integer
 | 
						|
(minutes->seconds minutes) -> integer
 | 
						|
 | 
						|
Auxiliary functions for converting an integer representing a count of
 | 
						|
days/hours/minutes to an integer representing that amount of time in
 | 
						|
seconds.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
(fs-object-last-modified-in? fs-object pair) -> {#t, #f}
 | 
						|
(fs-object-last-accessed-in? fs-object pair) -> {#t, #f}
 | 
						|
(fs-object-created-in? fs-object pair) -> {#t, #f}
 | 
						|
 | 
						|
PAIR is a pair representing an interval of time. These functions check
 | 
						|
whether the date when then file represented by FS-OBJECT was last
 | 
						|
modified/last-accessed/created lies in this interval (includes left
 | 
						|
and right boundary of the interval).
 | 
						|
 | 
						|
 | 
						|
 | 
						|
(fs-object-name-matches? fs-object regexp) -> {#t, #f}
 | 
						|
 | 
						|
Returns #t if REGEXP-SEARCH? for regexp matches the filename of the
 | 
						|
file represented by FS-OBJECT.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
(ds-object-file-name-matches? fs-object regexp) -> {#t, #f}
 | 
						|
 | 
						|
Returns #t if REGEXP-SEARCH? for regexp matches the filename
 | 
						|
(including the absolute path) of the file represented by FS-OBJECT.
 | 
						|
 | 
						|
 | 
						|
The structure DIR-STREAM-TOOLS offers two small applications of the library:
 | 
						|
 | 
						|
(dir-stream-disc-usage dir-stream) -> list
 | 
						|
 | 
						|
Returns a list with three elements: the name of the directory, the
 | 
						|
disc usage in bytes, and a list of the sub-directories in the same
 | 
						|
format.
 | 
						|
 | 
						|
(dir-stream-display dir-stream) -> unspecific
 | 
						|
 | 
						|
Displays DIR-STREAM.
 |