1. package Tiles.Keen is 
  2.  
  3.     type Action_Type is (NONE, HAZZARD, POLE, WATER, END_LEVEL, ENTER_LEVEL); 
  4. --    for Action_Type use ( 
  5. --        0 => NONE, 
  6. --        1 => HAZZARD, 
  7. --        2 => POLE, 
  8. --        3 => WATER, 
  9. --        4 => END_LEVEL, 
  10. --        5 => ENTER_LEVEL 
  11. --    ); 
  12.  
  13.     function ">"( l, r : Action_Type ) return Boolean; 
  14.  
  15.     type Keen_Tile is new Tile_Object with private; 
  16.     type A_Keen_Tile is access all Keen_Tile'Class; 
  17.  
  18.     function Get_Action( this : access Keen_Tile ) return Action_Type; 
  19.  
  20. private 
  21.  
  22.     type Keen_Tile is new Tile_Object with 
  23.         record 
  24.             action : Action_Type := NONE; 
  25.         end record; 
  26.  
  27.     procedure Set_Attribute( this  : in out Keen_Tile; 
  28.                              found : out Boolean; 
  29.                              name  : String; 
  30.                              val   : String := "" ); 
  31.     pragma Precondition( name'Length > 0 ); 
  32.  
  33.     function Object_Input( stream : access Root_Stream_Type'Class ) return Keen_Tile; 
  34.     for Keen_Tile'Input use Object_Input; 
  35.  
  36.     procedure Object_Output( stream : access Root_Stream_Type'Class; obj : Keen_Tile ); 
  37.     for Keen_Tile'Output use Object_Output; 
  38.  
  39.     procedure Object_Read( stream : access Root_Stream_Type'Class; obj : out Keen_Tile ); 
  40.     for Keen_Tile'Read use Object_Read; 
  41.  
  42.     procedure Object_Write( stream : access Root_Stream_Type'Class; obj : Keen_Tile ); 
  43.     for Keen_Tile'Write use Object_Write; 
  44.  
  45. end Tiles.Keen;