-- dirman.mesa    June 10, 1982 11:45 am
-- Interface to the directory component of the
--  Cedar Interim File System.


DIRECTORY
  Rope: TYPE USING [ROPE];
  

DirMan: DEFINITIONS = {

-- DirMan manages the representation of directories
-- Exceptional conditions are reported with CIFS.Error

  Dir: TYPE = REF DirObject;
  DirObject: TYPE;

  Open: PROC [name: Rope.ROPE, erase: BOOLEAN ← FALSE]
    RETURNS[d: Dir];
      -- Open a directory

  Close: PROC [d: Dir];
      -- Close a directory 

  Delete: PROC [d: Dir, name: Rope.ROPE];
      -- Delete an entry in a directory
      
  Destroy: PROC[d: Dir];
      -- Destroy a directory

  EProc: TYPE = PROC [name, link, comment: REF TEXT]
    RETURNS [stop: BOOLEAN];
      -- Procedure that is called for directory enumeration
      -- If EProc returns T then the enumeration is halted
      
  Enumerate: PROCEDURE [d: Dir, pattern: Rope.ROPE, p: EProc];
      -- Enumerate the names in d that match pattern.
      -- Pattern can contain "*" (match any sequence of characters)
      -- Pattern can contain "#" (match exactly one arbitrary character)
      -- The pattern "*" will enumerate the entire directory

  Insert: PROCEDURE [d: Dir, name: Rope.ROPE, link: Rope.ROPE ← NIL,
     comment: Rope.ROPE ← NIL];
      -- Insert an entry in a directory
      -- name is the entry name
      -- if the entry is a link, then link is its target
      -- comment is an optional comment for the entry
      
  SetFlushMode: PROCEDURE [d: Dir, flush: BOOLEAN ← TRUE];
      -- If flush is T, then the directory will be forced to disk after
      -- every update operation
      -- If flush is F, then the directory will not be forced to disk
      -- In addtion, d.SetFlushMode[TRUE] flushes the directory

}..