(***************************************************************************

     $RCSfile: FileSysRes.mod $
  Description: Interface to FileSystem.resource

   Created by: fjc (Frank Copeland)
    $Revision: 3.2 $
      $Author: fjc $
        $Date: 1994/08/08 00:57:14 $

  $VER: filesysres.h 36.4 (3.5.90)
  Includes Release 40.15

  (C) Copyright 1985-1993 Commodore-Amiga, Inc.
      All Rights Reserved

  Oberon-A interface Copyright © 1994, Frank Copeland.
  This file is part of the Oberon-A Interface.
  See Oberon-A.doc for conditions of use and distribution.

***************************************************************************)

MODULE FileSysRes;

(*
** $C- CaseChk       $I- IndexChk  $L+ LongAdr   $N- NilChk
** $P- PortableCode  $R- RangeChk  $S- StackChk  $T- TypeChk
** $V- OvflChk       $Z- ZeroVars
*)

IMPORT E := Exec, D := Dos;


(*
**      FileSystem.resource description
*)

CONST

  name * = "FileSystem.resource";

TYPE

  FileSysResourcePtr * = CPOINTER TO FileSysResource;
  FileSysResource * = RECORD (E.Node) (* on resource list *)
    creator *        : E.STRPTR;      (* name of creator of this resource *)
    fileSysEntries * : E.List;        (* list of FileSysEntry structs *)
  END; (* FileSysResource *)

  FileSysEntryPtr * = CPOINTER TO FileSysEntry;
  FileSysEntry * = RECORD (E.Node) (* on fsrFileSysEntries list *)
                                   (* lnName is of creator of this entry *)
    dosType *    : E.ULONG;        (* DosType of this FileSys *)
    version *    : E.ULONG;        (* Version of this FileSys *)
    patchFlags * : SET;            (* bits set for those of the following that *)
                                   (*   need to be substituted into a standard *)
                                   (*   device node for this file system: e.g. *)
                                   (*   180H for substitute SegList & GlobalVec *)
    fseType *    : E.ULONG;        (* device node type: zero *)
    task *       : E.TaskPtr;      (* standard dos "task" field *)
    lock *       : D.FileLockPtr;  (* not used for devices: zero *)
    handler *    : D.BSTR;         (* filename to loadseg (if SegList is null) *)
    stackSize *  : E.ULONG;        (* stacksize to use when starting task *)
    priority *   : LONGINT;        (* task priority when starting task *)
    startup *    : D.BPTR;         (* startup msg: FileSysStartupMsg for disks *)
    segList *    : D.BPTR;         (* code to run to start new task *)
    globalVec *  : D.BPTR;         (* BCPL global vector when starting task *)
    (* no more entries need exist than those implied by fsePatchFlags *)
  END; (* FileSysEntry *)


(**-- Resource Base variable --------------------------------------------*)

VAR

  base * : FileSysResourcePtr;


(**-- Resource Base variable --------------------------------------------*)
(** $L- Address globals through A4 *)


(**-----------------------------------*)
PROCEDURE OpenResource * (mustOpen : BOOLEAN);

BEGIN (* OpenResource *)
  IF base = NIL THEN
    base := E.base.OpenResource (name);
    IF mustOpen & (base = NIL) THEN HALT (100) END;
  END; (* IF *)
END OpenResource;


END FileSysRes.
