with Interfaces.C;
with Interfaces.C.Strings;
with System;

package FILO.FS.NullFS is
   type NullFS_Type is private;


   procedure Mount
      (Item : in out NullFS_Type;
       Success : out Boolean);

   procedure Open
      (Item    : in out NullFS_Type;
       Path    : in     String;
       Success : out    Boolean);

   procedure Read
      (Item    : in out NullFS_Type;
       Buffer  : in out Buffer_Type;
       Offset  : in     Natural;
       Success : out    Boolean);

   procedure Close 
      (Item : in out NullFS_Type;
       Success : out Boolean);

   ---------------------------------------------------------------------

   function C_Mount return Interfaces.C.int
   with
      Export,
      Convention => C,
      External_Name => "nullfs_mount";

   function C_Read 
      (buf : System.Address;
       len : Interfaces.C.int)
   return Interfaces.C.int
   with
      Export,
      Convention => C,
      External_Name => "nullfs_read";

   function C_Dir
      (Path : Interfaces.C.Strings.chars_ptr)
   return Interfaces.C.int
   with
      Export,
      Convention => C,
      External_Name => "nullfs_dir";

   function C_Close return Interfaces.C.int
   with
      Export,
      Convention => C,
      External_Name => "nullfs_close";

private
   type State_Type is (Unmounted, Mounted, File_Open);

   type NullFS_Type is record
      State : State_Type;
   end record;
   
end FILO.FS.NullFS;
