with Interfaces.C; use Interfaces.C;
package Allegro.Files is
type Packfile is private;
type A_Packfile is access all Packfile;
type A_pf_fclose_proc is
access function( userdata : Address ) return Integer;
type A_pf_getc_proc is
access function( userdata : Address ) return Integer;
type A_pf_ungetc_proc is
access function( c : Integer; userdata : Address ) return Integer;
type A_pf_fread_proc is
access function( p : Address;
n : Interfaces.C.long;
userdata : Address ) return Interfaces.C.long;
type A_pf_putc_proc is
access function( c : Integer; userdata : Address ) return Integer;
type A_pf_fwrite_proc is
access function( p : Address;
n : Interfaces.C.long;
userdata : Address ) return Interfaces.C.long;
type A_pf_seek_proc is
access function( userdata : Address; offset : Integer ) return Integer;
type A_pf_feof_proc is
access function( userdata : Address ) return Integer;
type A_pf_ferror_proc is
access function( userdata : Address ) return Integer;
type Packfile_Vtable is
record
pf_fclose : A_pf_fclose_proc;
pf_getc : A_pf_getc_proc;
pf_ungetc : A_pf_ungetc_proc;
pf_fread : A_pf_fread_proc;
pf_putc : A_pf_putc_proc;
pf_fwrite : A_pf_fwrite_proc;
pf_fseek : A_pf_seek_proc;
pf_feof : A_pf_feof_proc;
pf_ferror : A_pf_ferror_proc;
end record;
type A_Packfile_Vtable is access all Packfile_Vtable;
function Find_Allegro_Resource( resource : String;
ext,
datafile,
objectname,
envvar,
subdir : String := "" ) return String;
procedure Set_Allegro_Resource_Path( priority : Integer; path : String );
procedure Packfile_Password( password : String );
function Pack_FOpen( filename, mode : String ) return A_Packfile;
function Pack_FOpen_Chunk( f : not null A_Packfile; pack : Boolean ) return A_Packfile;
function Pack_FOpen_Vtable( vtable : A_Packfile_Vtable;
userdata : Address ) return A_Packfile;
function Pack_FClose( f : not null A_Packfile ) return Integer;
procedure Pack_FClose0( f : in out A_Packfile );
function Pack_FClose_Chunk( f : not null A_Packfile ) return A_Packfile;
function Pack_FEOF( f : not null A_Packfile ) return Boolean;
function Pack_FError( f : not null A_Packfile ) return Boolean;
function Pack_FRead( p : Address; n : Integer; f : not null A_Packfile ) return Integer;
function Pack_FSeek( f : not null A_Packfile; offset : Integer ) return Boolean;
function Pack_FWrite( p : Address; n : Integer; f : not null A_Packfile ) return Integer;
function Pack_GetC( f : not null A_Packfile ) return Integer;
function Pack_IGetL( f : not null A_Packfile ) return Integer;
function Pack_PutC( c : Integer; f : not null A_Packfile ) return Integer;
private
type Packfile is null record;
pragma Convention( C, A_pf_fclose_proc );
pragma Convention( C, A_pf_getc_proc );
pragma Convention( C, A_pf_ungetc_proc );
pragma Convention( C, A_pf_fread_proc );
pragma Convention( C, A_pf_putc_proc );
pragma Convention( C, A_pf_fwrite_proc );
pragma Convention( C, A_pf_seek_proc );
pragma Convention( C, A_pf_feof_proc );
pragma Convention( C, A_pf_ferror_proc );
pragma Convention( C, Packfile_Vtable );
pragma Import( C, Pack_FClose, "pack_fclose" );
pragma Import( C, Pack_FClose_Chunk, "pack_fclose_chunk" );
pragma Import( C, Pack_FOpen_Vtable, "pack_fopen_vtable" );
pragma Import( C, Pack_FRead, "pack_fread" );
pragma Import( C, Pack_FWrite, "pack_fwrite" );
pragma Import( C, Pack_GetC, "pack_getc" );
pragma Import( C, Pack_IGetL, "pack_igetl" );
pragma Import( C, Pack_PutC, "pack_putc" );
end Allegro.Files;