with Interfaces;
with Interfaces.C;

use Interfaces.C;

package FS.FILO is

private
   type Partition_Length is range 0 .. Interfaces.Unsigned_64'Last;

   function Part_Length return Partition_Length;

   type File_Length is range 0 .. int'Last; -- Should be higher, fix FILO first
   subtype File_Offset is File_Length range 0 .. File_Length'Last - 1;

   function File_Max return File_Length;
   procedure Set_File_Max (Len : File_Length);

   function File_Pos return File_Offset;
   procedure Set_File_Pos (Off : File_Offset);

end FS.FILO;
