diff options
-rw-r--r-- | example/virtual_io_example.adb | 36 |
1 files changed, 14 insertions, 22 deletions
diff --git a/example/virtual_io_example.adb b/example/virtual_io_example.adb index add9b56..0561655 100644 --- a/example/virtual_io_example.adb +++ b/example/virtual_io_example.adb @@ -33,7 +33,7 @@ procedure Virtual_IO_Example is Virtual_File : DIO.File_Type; - Current_Offset : Libsndfile.Count_Type := 1; + Current_Offset : Libsndfile.Count_Type := 0; function My_Length @@ -49,20 +49,14 @@ procedure Virtual_IO_Example is begin case Whence is when Libsndfile.From_Start => - Current_Offset := 1 + Offset; + Current_Offset := Offset; when Libsndfile.From_Current => Current_Offset := Current_Offset + Offset; when Libsndfile.From_End => - Current_Offset := Libsndfile.Count_Type (DIO.Size (Virtual_File)) + Offset; + Current_Offset := My_Length - 1 + Offset; end case; - if Current_Offset < 1 or - Current_Offset > Libsndfile.Count_Type (DIO.Size (Virtual_File)) - then - Current_Offset := 1; - return -1; - else - return Current_Offset; - end if; + Current_Offset := Current_Offset mod My_Length; + return Current_Offset; end My_Seek; function My_Read @@ -73,13 +67,12 @@ procedure Virtual_IO_Example is Item : Interfaces.Unsigned_8; Data_Position : Integer := 1; begin - while Current_Offset <= Libsndfile.Count_Type (DIO.Size (Virtual_File)) and - Data_Position - 1 < Integer (Bytes) - loop - DIO.Read (Virtual_File, Item, DIO.Count (Current_Offset)); + while Data_Position <= Integer (Bytes) loop + DIO.Read (Virtual_File, Item, DIO.Count (1 + Current_Offset)); Data (Data_Position) := Item; - Current_Offset := Current_Offset + 1; Data_Position := Data_Position + 1; + exit when Current_Offset + 1 > My_Length; + Current_Offset := Current_Offset + 1; end loop; return Libsndfile.Count_Type (Data_Position - 1); end My_Read; @@ -92,13 +85,12 @@ procedure Virtual_IO_Example is Item : Interfaces.Unsigned_8; Data_Position : Integer := 1; begin - while Current_Offset <= Libsndfile.Count_Type (DIO.Size (Virtual_File)) and - Data_Position - 1 < Integer (Bytes) - loop + while Data_Position <= Integer (Bytes) loop Item := Data (Data_Position); - DIO.Write (Virtual_File, Item, DIO.Count (Current_Offset)); - Current_Offset := Current_Offset + 1; + DIO.Write (Virtual_File, Item, DIO.Count (1 + Current_Offset)); Data_Position := Data_Position + 1; + exit when Current_Offset + 1 > My_Length; + Current_Offset := Current_Offset + 1; end loop; return Libsndfile.Count_Type (Data_Position - 1); end My_Write; @@ -106,7 +98,7 @@ procedure Virtual_IO_Example is function My_Tell return Libsndfile.Count_Type is begin - return Current_Offset; + return Current_Offset + 1; end My_Tell; |