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