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;