Move fs-filo to filo-fs

Signed-off-by: Thomas Heijligen <src@posteo.de>
diff --git a/src/filo-fs-ext2.ads b/src/filo-fs-ext2.ads
new file mode 100644
index 0000000..b26b103
--- /dev/null
+++ b/src/filo-fs-ext2.ads
@@ -0,0 +1,63 @@
+package FILO.FS.Ext2 is
+
+   type T is private;
+
+   function Is_Mounted (State : T) return Boolean;
+   function Is_Open (State : T) return Boolean
+   with
+      Post => (if Is_Open'Result then Is_Mounted (State));
+
+   procedure Mount
+     (State    : in out T;
+      Part_Len : in     Partition_Length;
+      Success  :    out Boolean)
+   with
+      Pre => not Is_Mounted (State),
+      Post => Success = Is_Mounted (State);
+
+   procedure Open
+     (State       : in out T;
+      File_Len    :    out File_Length;
+      File_Path   : in     String;
+      Success     : out    Boolean)
+   with
+      Pre => Is_Mounted (State) and not Is_Open (State),
+      Post => Success = Is_Open (State);
+
+   procedure Close (State : in out T)
+   with
+      Pre => Is_Open (State),
+      Post => Is_Mounted (State);
+
+   procedure Read
+     (State    : in out T;
+      File_Len : in     File_Length;
+      File_Pos : in out File_Offset;
+      Buf      :    out Buffer_Type;
+      Len      :    out Natural)
+   with
+      Pre => Is_Open (State),
+      Post => Is_Open (State);
+
+private
+   type State is (Unmounted, Mounted, File_Opened);
+
+   -- maximum block size is 64KiB (2^16):
+   subtype Log_Block_Size is Positive range 10 .. 16;
+
+   subtype Inode_Size is Positive range 128 .. Positive (Unsigned_16'Last);
+   subtype Desc_Size  is Positive range  32 .. Positive (Unsigned_16'Last);
+
+   type T is record
+      S : State;
+      Part_Len          : Partition_Length := 0;
+      First_Data_Block  : Block_Offset := 0;
+      Block_Size_Bits   : Log_Block_Size := 10;
+      Inodes_Per_Group  : Positive := 1;
+      Inode_Size        : Ext2.Inode_Size := Ext2.Inode_Size'First;
+      Desc_Size         : Ext2.Desc_Size := Ext2.Desc_Size'First;
+      Feature_Extents   : Boolean := False;
+      Feature_64Bit     : Boolean := False;
+   end record;
+
+end FILO.FS.Ext2;