1. package Worlds.Keen is 
  2.  
  3.     pragma Elaborate_Body; 
  4.  
  5. private 
  6.  
  7.     type Keen_World is new World_Object with 
  8.         record 
  9.             introduction : Unbounded_String; 
  10.         end record; 
  11.     type A_Keen_World is access all Keen_World'Class; 
  12.  
  13.     -- Constructs the world without a map or library name; used for streaming. 
  14.     procedure Construct( this : access Keen_World ); 
  15.  
  16.     -- Constructs a new empty world with the given arguments 
  17.     procedure Construct( this    : access Keen_World; 
  18.                          width, 
  19.                          height  : Positive; 
  20.                          libName, 
  21.                          domain  : String ); 
  22.     pragma Precondition( libName'Length > 0 ); 
  23.     pragma Precondition( domain'Length > 0 ); 
  24.  
  25.     procedure Queue_Load_Events( this : access Keen_World ); 
  26.  
  27.     -- extended keen properties: 
  28.     -- "introduction" : the introduction text 
  29.     procedure Set_Property( this : access Keen_World; name, value : String ); 
  30.     pragma Precondition( name'Length > 0 ); 
  31.  
  32.     function Object_Input( stream : access Root_Stream_Type'Class ) return Keen_World; 
  33.     for Keen_World'Input use Object_Input; 
  34.  
  35.     procedure Object_Read( stream : access Root_Stream_Type'Class; obj : out Keen_World ); 
  36.     for Keen_World'Read use Object_Read; 
  37.  
  38.     procedure Object_Write( stream : access Root_Stream_Type'Class; obj : Keen_World ); 
  39.     for Keen_World'Write use Object_Write; 
  40.  
  41. end Worlds.Keen;