with Gmface.Gm_Common;                    use Gmface.Gm_Common;
with Gmface.Gm_Virtual;                   use Gmface.Gm_Virtual;
with Gmface.Gm_Virtual.Gmface.Gmface_Plugins;
use Gmface.Gm_Virtual.Gmface.Gmface_Plugins;

with Gmface.Gm_Processing.Gmface.Gm_Plugin_Processing;
use Gmface.Gm_Processing.Gmface.Gm_Plugin_Processing;


with Gmface.Gm_Processing;                use Gmface.Gm_Processing;

with Ada.Calendar;                      use Ada.Calendar;
package Gmface.Gm_Processing.Gmface.Gm_Prgm_Change   is
   
   type Prgm_Change_Processing(Plugin : Abstract_Plugin_Access);
   
   task type Prgm_Change_Process (Prgm_Change : access Prgm_Change_Processing) is
      entry Initialize(Options : in Work_Options_Access);
      entry Start(Start_time : in Time; Tempo : in Tempo_Type; Signature : in Time_Signature_Type);
      entry Stop;
      entry Halt;
   end Prgm_Change_Process;
   
   type Prgm_Change_Processing(Plugin : Abstract_Plugin_Access) is new Plugin_Processing(Pc_List) with
      record
	 Process : Prgm_Change_Process(Prgm_Change_Processing'Access);
      end record;
   
   
   procedure Initialize(Plugin_Process : in Prgm_Change_Processing; Options : in Work_Options_Access);
   
   procedure Start(Plugin_Process : in Prgm_Change_Processing;Start_Time : in Time; Tempo : in Tempo_Type; Signature : in Time_Signature_Type);
   procedure Stop(Plugin_Process : in Prgm_Change_Processing);
   procedure Halt(Plugin_Process : in Prgm_Change_Processing);
   
end Gmface.Gm_Processing.Gmface.Gm_Prgm_Change;