1. with Allegro.Files;                     use Allegro.Files; 
  2. with Interfaces.C;                      use Interfaces.C; 
  3.  
  4. -- Allegro 4.4.2 - Datafile routines 
  5. package Allegro.Datafiles is 
  6.  
  7.     type DAT_ID is new AL_ID; 
  8.  
  9.     type Datafile is 
  10.         record 
  11.             dat  : Address; 
  12.             typ  : DAT_ID; 
  13.             size : C.long; 
  14.             prop : Address; 
  15.         end record; 
  16.     type A_Datafile is access all Datafile; 
  17.  
  18.     subtype A_Datafile_Index is Address; 
  19.  
  20.     type A_Datafile_Loader is 
  21.         access function( f : A_Packfile; size : C.long ) return Address; 
  22.  
  23.     type A_Datafile_Examiner is 
  24.         access procedure( d : A_Datafile ); 
  25.  
  26.     type A_Datafile_Destroyer is 
  27.         access procedure( data : Address ); 
  28.  
  29.     ---------------------------------------------------------------------------- 
  30.  
  31.     function Create_Datafile_Index( filename : String ) return A_Datafile_Index; 
  32.  
  33.     procedure Destroy_Datafile_Index( index : in out A_Datafile_Index ); 
  34.  
  35.     function Find_Datafile_Object( dat        : not null A_Datafile; 
  36.                                    objectname : String ) return A_Datafile; 
  37.  
  38.     procedure Fixup_Datafile( data : not null A_Datafile ); 
  39.  
  40.     function Get_Datafile_Property( dat : not null A_Datafile; 
  41.                                     typ : DAT_ID ) return String; 
  42.  
  43.     function Load_Datafile( filename : String ) return A_Datafile; 
  44.  
  45.     function Load_Datafile_Callback( filename : String; 
  46.                                      callback : not null A_Datafile_Examiner 
  47.                                    ) return A_Datafile; 
  48.  
  49.     function Load_Datafile_Object( filename   : String; 
  50.                                    objectname : String ) return A_Datafile; 
  51.  
  52.     function Load_Datafile_Object_Indexed( index : A_Datafile_Index; 
  53.                                            item  : Integer 
  54.                                          ) return A_Datafile; 
  55.  
  56.     procedure Register_Datafile_Object( id      : DAT_ID; 
  57.                                         load    : A_Datafile_Loader; 
  58.                                         destroy : A_Datafile_Destroyer ); 
  59.  
  60.     function To_DAT_ID( a, b, c, d : Character ) return DAT_ID; 
  61.  
  62.     procedure Unload_Datafile( dat : in out A_Datafile ); 
  63.  
  64.     procedure Unload_Datafile_Object( dat : in out A_Datafile ); 
  65.  
  66. private 
  67.  
  68.     pragma Convention( C, Datafile ); 
  69.  
  70.     pragma Convention( C, A_Datafile_Loader ); 
  71.     pragma Convention( C, A_Datafile_Examiner ); 
  72.     pragma Convention( C, A_Datafile_Destroyer ); 
  73.  
  74.     pragma Import( C, Fixup_Datafile, "fixup_datafile" ); 
  75.     pragma Import( C, Load_Datafile_Object_Indexed, "load_datafile_object_indexed" ); 
  76.     pragma Import( C, Register_Datafile_Object, "register_datafile_object" ); 
  77.  
  78. end Allegro.Datafiles;