pkgobj/src/Common/FileSys.i3


Copyright (C) 1994, Digital Equipment Corp.
FileSys.i3

INTERFACE FileSys;

IMPORT TextList, OSError, Rd, Time, Wr;
(semi) OS-independent file system types and ops

TYPE
  FN = TEXT;

  FilePerm = [0..65535];
  FileType = {Normal, SLink, Dir, Other};
  FileInfo = RECORD
    type: BITS 16 FOR FileType;
    perm: BITS 16 FOR FilePerm;
    length: BITS 32 FOR [-16_7FFFFFFF-1..16_7FFFFFFF]; (* in bytes *)
    date: Time.T;
  END;

TYPE
  Enumeration = TextList.T;

CONST
  FilePermNorm = 1;        (* 644 on Ultrix *)
  FilePermRWX = 2;         (* 755 on Ultrix *)
  FilePermReadOnly = 3;    (* 444 on Ultrix *)
  FilePermRX = 4;          (* 555 on Ultrix *)

TYPE ErrorClass = {NoRoomInFS, IO, Access, Lookup, Other};

PROCEDURE ClassifyError(e: OSError.Code) : ErrorClass;
open/close file

PROCEDURE OpenRead(fn: FN) : Rd.T RAISES {OSError.E};
PROCEDURE OpenWrite(fn: FN) : Wr.T RAISES {OSError.E};
PROCEDURE OpenAppend(fn: FN) : Wr.T RAISES {OSError.E};
main procedures

PROCEDURE Enumerate (path: FN): Enumeration RAISES {OSError.E};
  (* *)

PROCEDURE GetInfo(path: FN; followLink: BOOLEAN := FALSE) : FileInfo
   RAISES {OSError.E};
  (* *)

PROCEDURE GetPath (path: FN): FN RAISES {OSError.E};
  (* *)

PROCEDURE MakeDir (path: FN) RAISES {OSError.E};
  (* *)

PROCEDURE SetModifiedDate (path: FN; date: Time.T) RAISES {OSError.E};
  (* *)

PROCEDURE SetMode (path: FN; perm: FilePerm) RAISES {OSError.E};
  (* *)

PROCEDURE Rename (source, dest: FN) RAISES {OSError.E};
  (* *)

PROCEDURE Remove (path: FN; recursive: BOOLEAN := FALSE) RAISES {OSError.E};
  (* iff recursive, we'll remove entire dir, otherwise the target
     must be a non-directory *)

PROCEDURE ReadLink(path: FN) : FN RAISES {OSError.E};
  (* *)

PROCEDURE HardLink(path: FN; referent: FN) RAISES {OSError.E};
  (* *)

PROCEDURE SymLink(path: FN; referent: FN) RAISES {OSError.E};
  (* *)

PROCEDURE CheckAccess (
    path: FN;
    write: BOOLEAN;
    fail: BOOLEAN := FALSE): BOOLEAN
    RAISES {OSError.E};
  (* returns result if not "fail" *)

PROCEDURE FreeDiskSpace(fn: FN) : CARDINAL RAISES {OSError.E};
   (* Returns the number of user 1KB block available in the
      file system volume which contains "fn". *)

END FileSys.

FileSys's implementation is in:


procedure FileSys.FreeDiskSpace is in: