with Libsens.Mal;                       use Libsens.Mal;
with Libsens.Common;                    use Libsens.Common;

with Libsens.Arch;                      use Libsens.Arch;
with Libsens.MIDI.Messages;             use Libsens.MIDI.Messages;

generic

package Libsens.Rhetorica is
   

   
   
   subtype Valid_Category_Type is Category_Type range lead..split;
   
   
   
   type Composer_Type;
      
   
   task type Compositor_Type (Composer : access Composer_Type) is
      pragma Storage_Size (16777216);
      entry Initialize(Filename : in String);
      entry Halt;      
      
      entry Respond(Filename : in String; Channel : in Channel_Type; sequence : out Seq_Vectors.vector);
   end Compositor_Type;
   
   type Composer_Type (Form : Form_Type;
		       cat : Valid_Category_Type) is limited
			  
      record	 
	 Arche                  : access Arche_Type'Class;	 
	 Compositor             : Compositor_Type(Composer_Type'Access);	 
      end record;
   
   type Composer_Access is access all Composer_Type;          

end Libsens.Rhetorica;