with Allegro.Files; use Allegro.Files;
with Interfaces.C; use Interfaces.C;
package Allegro.Datafiles is
type DAT_ID is new AL_ID;
type Datafile is
record
dat : Address;
typ : DAT_ID;
size : C.long;
prop : Address;
end record;
type A_Datafile is access all Datafile;
subtype A_Datafile_Index is Address;
type A_Datafile_Loader is
access function( f : A_Packfile; size : C.long ) return Address;
type A_Datafile_Examiner is
access procedure( d : A_Datafile );
type A_Datafile_Destroyer is
access procedure( data : Address );
function Create_Datafile_Index( filename : String ) return A_Datafile_Index;
procedure Destroy_Datafile_Index( index : in out A_Datafile_Index );
function Find_Datafile_Object( dat : not null A_Datafile;
objectname : String ) return A_Datafile;
procedure Fixup_Datafile( data : not null A_Datafile );
function Get_Datafile_Property( dat : not null A_Datafile;
typ : DAT_ID ) return String;
function Load_Datafile( filename : String ) return A_Datafile;
function Load_Datafile_Callback( filename : String;
callback : not null A_Datafile_Examiner
) return A_Datafile;
function Load_Datafile_Object( filename : String;
objectname : String ) return A_Datafile;
function Load_Datafile_Object_Indexed( index : A_Datafile_Index;
item : Integer
) return A_Datafile;
procedure Register_Datafile_Object( id : DAT_ID;
load : A_Datafile_Loader;
destroy : A_Datafile_Destroyer );
function To_DAT_ID( a, b, c, d : Character ) return DAT_ID;
procedure Unload_Datafile( dat : in out A_Datafile );
procedure Unload_Datafile_Object( dat : in out A_Datafile );
private
pragma Convention( C, Datafile );
pragma Convention( C, A_Datafile_Loader );
pragma Convention( C, A_Datafile_Examiner );
pragma Convention( C, A_Datafile_Destroyer );
pragma Import( C, Fixup_Datafile, "fixup_datafile" );
pragma Import( C, Load_Datafile_Object_Indexed, "load_datafile_object_indexed" );
pragma Import( C, Register_Datafile_Object, "register_datafile_object" );
end Allegro.Datafiles;