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