-- Programmed by Jedidiah Barber -- Released into the public domain pragma Ada_2012; private with Interfaces, System; package Libsndfile.Virtual is --------------------------------- -- Data Types and Structures -- --------------------------------- type Virtual_Sound_File is new Sound_File with private; type File_Length_Function is access function return Count_Type; type Seek_Function is access function (Offset : in Count_Type; Whence : in Seek_From) return Count_Type; type Read_Function is access function (Data : out Raw_Data; Bytes : in Count_Type) return Count_Type; type Write_Function is access function (Data : in Raw_Data; Bytes : in Count_Type) return Count_Type; type Tell_Function is access function return Count_Type; --------------------- -- API Interface -- --------------------- procedure Open (File : in out Virtual_Sound_File; Mode : in File_Mode; Info : in out File_Info; Length : in File_Length_Function; Seek : in Seek_Function; Read : in Read_Function; Write : in Write_Function; Tell : in Tell_Function) with Pre => not Is_Open (File), Post => Is_Open (File); private type Virtual_Data is limited record My_Length : File_Length_Function; My_Seek : Seek_Function; My_Read : Read_Function; My_Write : Write_Function; My_Tell : Tell_Function; end record with Convention => C; type Virtual_Sound_File is new Sound_File with record My_Virtual : Virtual_Data; end record; function Ada_Filelen_Hook (Data : in System.Address) return Interfaces.Integer_64; pragma Export (C, Ada_Filelen_Hook, "ada_filelen_hook"); function Ada_Seek_Hook (Offset : in Interfaces.Integer_64; Whence : in Interfaces.C.int; Data : in System.Address) return Interfaces.Integer_64; pragma Export (C, Ada_Seek_Hook, "ada_seek_hook"); function Ada_Read_Hook (Ptr : in System.Address; Count : in Interfaces.Integer_64; Data : in System.Address) return Interfaces.Integer_64; pragma Export (C, Ada_Read_Hook, "ada_read_hook"); function Ada_Write_Hook (Ptr : in System.Address; Count : in Interfaces.Integer_64; Data : in System.Address) return Interfaces.Integer_64; pragma Export (C, Ada_Write_Hook, "ada_write_hook"); function Ada_Tell_Hook (Data : in System.Address) return Interfaces.Integer_64; pragma Export (C, Ada_Tell_Hook, "ada_tell_hook"); end Libsndfile.Virtual;