with Gmface.Gm_MIdi.Instruments;
use Gmface.Gm_Midi.Instruments;
with Gmface.Gm_Processing.Gm_Work_Processing;
use Gmface.Gm_Processing.Gm_Work_Processing;
with Gmface.Gm_Virtual.Gmface.Gmface_Work;
use Gmface.Gm_Virtual.Gmface.Gmface_Work;
with Gmface.Gm_Processing.Gmface.Gm_Plugin_Processing;
use Gmface.Gm_Processing.Gmface.Gm_Plugin_Processing;
package Gmface.Gm_Processing.Gmface.Work_Processing is            
   
   
   function Process_Initialize(Class : in Plugin_Enum;
			       Plugin : in Abstract_Plugin_Access) return Gm_Plugin_Processing_Access;
   
   
   type Gmface_Work_Processing;
   
   
   task type Work_Process(Processing : access Gmface_Work_Processing) is
      entry Initialize;
      entry Start;
      entry Stop;
      entry Mod_Rec(Status : in Boolean);
      entry Mod_Play(Status : in Boolean);
      entry Mod_Reset;
      entry End_Of_Process;
      entry Halt;
   end Work_Process;
      
   
   type Gmface_Work_Processing is
     new Work_Processing_Record with
      record
	 Work         : Gmface_Work_Access;
	 Process      : Work_Process(Gmface_Work_Processing'Access);	 
      end record;
   

   procedure Initialize(Processing : in out Gmface_Work_Processing;
   			Work       : in Work_Access;
   			Insts      : access Bandmaster_record);
end Gmface.Gm_Processing.Gmface.Work_Processing;