::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:
class Io.Directory.Public public Gilda: Perform file system operations on directories.
type Directory.Id is &Handle for listing a directory
- Id = 0 word :Hide the implementation of directory.
type Tame.Tree is &Recursively return subdirectories and file names.
Dir Directory.Id, &Current directory being sequenced.
Path string, &Current directory path name. Ends with "/".
Pending Queue..string :Pending directories.
import Io.Path.Public,
Stack(Bit)
:
:...............................................................................
::::::::::::::::::::::::::: io/directory/Io.Directory ::::::::::::::::::::::::
:
method CHANGE.DIRECTORY: Change the current working directory.
entry Path string :Target OS path.
exit Code byte :0 - Okay; else error.
:
:...............................................................................
:
method IN.NEW: Create a directory and go into it.
entry Path string :The OS path name for the directory.
exit Status byte :0 - created and in;
:1 - exists and in;
:2 - Create failed.
:3 - Created, but can't go in.
:
:...............................................................................
:
method COPY.DIRECTORY: Recursively duplicate a directory.
entry From string, &Source directory path (tame, os path, forward slash).
To string, &New target path (tame, optional trailing "/").
All = 0 Bit :1 - Overwrite read-only files; 0 - Fail if read-only.
:
:...............................................................................
:
method COPY.MOVE.DIRECTORY: Recursively duplicate a directory.
entry From string, &Source directory path (tame).
To string, &New target path (tame, optional trailing "/").
Move = 0 Bit :0 - Copy; On - Move
:
:...............................................................................
:
method DELETE.DIRECTORY: Erase a directory and subdirectories.
entry Root string :Relative tame directory path to kill
: (forward slash; trailing slash optional).
exit Miss = 0 Bit :0 - The directory was deleted okay.
:1 - There were unremovable subdirectories.
: The directory was partially deleted.
entry Force = 0 Bit :Erase read only files if permitted.
:
:...............................................................................
:
method MOVE.DIRECTORY: Rename a directory. Slack dependent???
entry From string, &O.S. path name of the single item to move.
To string
:
:...............................................................................
::::::::::::::::::::::::: io/directory/id/Directory.Id :::::::::::::::::::::::
:
method OPEN..Directory.Id: Initiate an iterator to access a directories contents.
exit Directory.Id : An Id used to reference the directory.
: 0 if the directory does not exist or
: if out of memory.
entry Path string : The Os path name for the directory (no wildcards).
:
:...............................................................................
:
method CLOSE..Directory.Id: Release a directory scan.
change Directory.Id :The directory id returned from Open.Directory.
:
:...............................................................................
:
method DRAIN..Directory.Id: Release an open directory.
change Directory.Id :The directory id returned from Open.Directory.
:
:...............................................................................
:
method NEXT..Directory.Id: Returns the name of the next element in a directory.
change Directory.Id :The directory id returned from Open.Directory.
exit Next string :The name of the next entry. If the entry
: is a directory, it will _NOT_ end in "/".
: Null when no more directory entries.
:
:...............................................................................
:
method NEXT.ATTRIBUTE..Directory.Id: Returns the name of the next element in a directory.
change Directory.Id :The directory id returned from Open.Directory.
exit Next string, &The name of the next entry. If the entry
& is a directory, it will _NOT_ end in "/".
& Null when no more directory entries.
Attribute
:
:...............................................................................
:
sequence LIST.DIRECTORY: Name of elements in a directory.
entry Path string : The Os path name for the directory (no wildcards).
exit Name string :The name of the next entry. If the entry
: is a directory, it will _NOT_ end in "/".
:
:...............................................................................
:
method CLOSE..List.Directory pure: Call when done listing directory elements.
change ~List.Directory :List.Directory iterator
:
:...............................................................................
::::::::::::::::::::::::::: io/directory/tame/Tame.Tree ::::::::::::::::::::::
:
method OPEN..Tame.Tree: Initialize a recursive bredth first directory scan.
change Tame.Tree : In - clean iterator;
:Out - Recursive directory iterator.
: $Path = "" if directory not found.
entry Root string :Directory (relative; tame; os path;
: any slash; trailing slash optional).
:
:...............................................................................
:
method NEXT..Tame.Tree: Recursively return the next directory or file.
change Tame.Tree :In - An open recursive directory id.
:Out - If $Path = "" then inaccessible or
: out of memory.
exit Component string :File name or directory path with trailing /.
:Null if done.
entry Depth = 0 Bit :Depth first if set; else bredth.
:
:...............................................................................
:
method CLOSE..Tame.Tree: Closes a recursive directory iteration before completion.
change Tame.Tree :An open directory id.
:
:...............................................................................
:
method DRAIN..Tame.Tree pure: Closes a recursive directory iteration before completion.
change Tame.Tree :A possibly open directory id.
:
:...............................................................................
:
sequence TAME.TREE: Bredth first search of a directory tree.
entry Root string, &Directory (relative; tame; os path;
& any slash; trailing slash optional).
Depth = 0 Bit :Depth first if set; else bredth.
exit Component string :File name or subdirectory path with trailing '/'.
:A lead space means the directory can not be accessed.
:
:...............................................................................
:
method SUPER..Tame.Tree pure: Tree path for the current directory.
change ~Tame.Tree :Tame.Tree iterator
exit Super string :Path of the current directory being scaned.
:
:...............................................................................
:
method PRUNE..Tame.Tree: If the sequence is active, Close it.
change ~Tame.Tree :Tame.Tree iterator
:
:...............................................................................
:
method TERMINATE..Tame.Tree: Release open directories.
change ~Tame.Tree :Tame.Tree iterator
:
:...............................................................................
::::::::::::::::::::::::::: io/directory/wild/Wild.Tree ::::::::::::::::::::::
method OPEN.TREE: Begin listing directory trees for selected files.
entry Dual string :<root directory>[/<tail>] (wild)
:
:...............................................................................
:
method CLOSE.TREE: Terminate a directory scan prematurely.
:
: If the scan completes you do not need to call this method.
:...............................................................................
:
method NEXT.TREE: Get the next directory of file in a tree.
exit Os string :OS path name (no wildcards) or "" (Element = None).
: Full path name if above the current directory or
: relative to the current directory.
: Forward slashes; trailing slash if a directory.
:
:...............................................................................
:
sequence WILD.TREE
entry Cross string :<root directory>[/<tail>] (wild)
exit Os string :OS path name (no wildcards).
: Full path name if above the current directory or
: relative to the current directory.
: Forward slashes; trailing slash if a directory.
:
:...............................................................................
:
method CLOSE..Wild.Tree
change ~Wild.Tree
:
:...............................................................................
end