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