1. with Interfaces.C;                      use Interfaces.C; 
  2.  
  3. -- Allegro 4.4.2 - File and compression routines 
  4. -- This package is missing: 
  5. -- get_exectuable_name, fix_filename_case, fix_filename_slashes, 
  6. -- canonicalize_filename, make_absolute_filename, make_relative_filename, 
  7. -- is_relative_filename, replace_filename, replace_extension, append_filename, 
  8. -- get_filename, get_extension, put_backslash, file_exists, exists, 
  9. -- file_size_ex, file_time, delete_file, for_each_file_ex, al_findfirst, 
  10. -- al_findnext, al_findclose, al_ffblk_get_size, pack_igetw, pack_iputw, 
  11. -- pack_igetl, pack_iputl, pack_mgetw, pack_mputw, pack_mgetl, pack_mputl, 
  12. -- pack_fgets, pack_fputs, create_lzss_pack_data, free_lzss_pack_data 
  13. -- lzss_write, create_lzss_unpack_data, free_lzss_unpack_data, lzss_read 
  14. package Allegro.Files is 
  15.  
  16.     type Packfile is private; 
  17.     type A_Packfile is access all Packfile; 
  18.  
  19.     type A_pf_fclose_proc is 
  20.         access function( userdata : Address ) return Integer; 
  21.  
  22.     type A_pf_getc_proc is 
  23.         access function( userdata : Address ) return Integer; 
  24.  
  25.     type A_pf_ungetc_proc is 
  26.         access function( c : Integer; userdata : Address ) return Integer; 
  27.  
  28.     type A_pf_fread_proc is 
  29.         access function( p        : Address; 
  30.                          n        : Interfaces.C.long; 
  31.                          userdata : Address ) return Interfaces.C.long; 
  32.  
  33.     type A_pf_putc_proc is 
  34.         access function( c : Integer; userdata : Address ) return Integer; 
  35.  
  36.     type A_pf_fwrite_proc is 
  37.         access function( p        : Address; 
  38.                          n        : Interfaces.C.long; 
  39.                          userdata : Address ) return Interfaces.C.long; 
  40.  
  41.     type A_pf_seek_proc is 
  42.         access function( userdata : Address; offset : Integer ) return Integer; 
  43.  
  44.     type A_pf_feof_proc is 
  45.         access function( userdata : Address ) return Integer; 
  46.  
  47.     type A_pf_ferror_proc is 
  48.         access function( userdata : Address ) return Integer; 
  49.  
  50.     type Packfile_Vtable is 
  51.         record 
  52.             pf_fclose : A_pf_fclose_proc; 
  53.             pf_getc   : A_pf_getc_proc; 
  54.             pf_ungetc : A_pf_ungetc_proc; 
  55.             pf_fread  : A_pf_fread_proc; 
  56.             pf_putc   : A_pf_putc_proc; 
  57.             pf_fwrite : A_pf_fwrite_proc; 
  58.             pf_fseek  : A_pf_seek_proc; 
  59.             pf_feof   : A_pf_feof_proc; 
  60.             pf_ferror : A_pf_ferror_proc; 
  61.         end record; 
  62.     type A_Packfile_Vtable is access all Packfile_Vtable; 
  63.  
  64.     ---------------------------------------------------------------------------- 
  65.  
  66.     function Find_Allegro_Resource( resource   : String; 
  67.                                     ext, 
  68.                                     datafile, 
  69.                                     objectname, 
  70.                                     envvar, 
  71.                                     subdir     : String := "" ) return String; 
  72.  
  73.     procedure Set_Allegro_Resource_Path( priority : Integer; path : String ); 
  74.  
  75.     procedure Packfile_Password( password : String ); 
  76.  
  77.     function Pack_FOpen( filename, mode : String ) return A_Packfile; 
  78.  
  79.     function Pack_FOpen_Chunk( f : not null A_Packfile; pack : Boolean ) return A_Packfile; 
  80.  
  81.     function Pack_FOpen_Vtable( vtable   : A_Packfile_Vtable; 
  82.                                 userdata : Address ) return A_Packfile; 
  83.  
  84.     -- Returns 0 on success, otherwise an error code. 
  85.     function Pack_FClose( f : not null A_Packfile ) return Integer; 
  86.  
  87.     procedure Pack_FClose0( f : in out A_Packfile ); 
  88.  
  89.     function Pack_FClose_Chunk( f : not null A_Packfile ) return A_Packfile; 
  90.  
  91.     function Pack_FEOF( f : not null A_Packfile ) return Boolean; 
  92.  
  93.     function Pack_FError( f : not null A_Packfile ) return Boolean; 
  94.  
  95.     function Pack_FRead( p : Address; n : Integer; f : not null A_Packfile ) return Integer; 
  96.  
  97.     -- Returns True on success. 
  98.     function Pack_FSeek( f : not null A_Packfile; offset : Integer ) return Boolean; 
  99.  
  100.     function Pack_FWrite( p : Address; n : Integer; f : not null A_Packfile ) return Integer; 
  101.  
  102.     function Pack_GetC( f : not null A_Packfile ) return Integer; 
  103.  
  104.     function Pack_IGetL( f : not null A_Packfile ) return Integer; 
  105.  
  106.     function Pack_PutC( c : Integer; f : not null A_Packfile ) return Integer; 
  107.  
  108. private 
  109.  
  110.     type Packfile is null record; 
  111.  
  112.     -------------------------------------------------------------------- 
  113.  
  114.     pragma Convention( C, A_pf_fclose_proc ); 
  115.     pragma Convention( C, A_pf_getc_proc ); 
  116.     pragma Convention( C, A_pf_ungetc_proc ); 
  117.     pragma Convention( C, A_pf_fread_proc ); 
  118.     pragma Convention( C, A_pf_putc_proc ); 
  119.     pragma Convention( C, A_pf_fwrite_proc ); 
  120.     pragma Convention( C, A_pf_seek_proc ); 
  121.     pragma Convention( C, A_pf_feof_proc ); 
  122.     pragma Convention( C, A_pf_ferror_proc ); 
  123.  
  124.     pragma Convention( C, Packfile_Vtable ); 
  125.  
  126.     pragma Import( C, Pack_FClose, "pack_fclose" ); 
  127.     pragma Import( C, Pack_FClose_Chunk, "pack_fclose_chunk" ); 
  128.     pragma Import( C, Pack_FOpen_Vtable, "pack_fopen_vtable" ); 
  129.     pragma Import( C, Pack_FRead, "pack_fread" ); 
  130.     pragma Import( C, Pack_FWrite, "pack_fwrite" ); 
  131.     pragma Import( C, Pack_GetC, "pack_getc" ); 
  132.     pragma Import( C, Pack_IGetL, "pack_igetl" ); 
  133.     pragma Import( C, Pack_PutC, "pack_putc" ); 
  134.  
  135. end Allegro.Files;