
[01;34mwith[m Ada[31m.[mUnchecked_Deallocation[31m;[m

[01;34mwith[m Text_Io[31m;[m                           [01;34muse[m Text_Io[31m;[m

[01;34mpackage[m [01;34mbody[m Libsens[31m.[mProcessing[31m.[mPlugins [01;34mis[m
   
   
   [01;34mtask[m [01;34mbody[m Event_Process_Type [01;34mis[m
      
      
      [01;34mtype[m Dated_Message_Type[31m;[m
      [01;34mtask[m [01;34mtype[m [01;30mEvent_Type[m[31m([mDated_Message [31m:[m [01;34maccess[m Dated_Message_Type[31m)[m [01;34mis[m
	 [01;34mentry[m [01;30mInitialize[m[31m([mDevice [31m:[m [01;34min[m Device_Num[31m;[m Message [31m:[m [01;34min[m Long[31m;[m Date [31m:[m [01;34min[m Time[31m;[m Hour [31m:[m [01;34min[m [32mDuration[m[31m);[m
	 [31m--entry Exhausted;[m
      [01;34mend[m Event_Type[31m;[m
      
      
      [01;34mtype[m Dated_Message_Type [01;34mis[m [01;34mlimited[m
	 [01;34mrecord[m
	    Device_Id [31m:[m Device_Num [31m:=[m [35m1[m[31m;[m
	    Message [31m:[m Interfaces[31m.[mC[31m.[mLong [31m:=[m [35m0[m[31m;[m
	    Hour    [31m:[m [32mDuration[m [31m:=[m [35m0.0[m[31m;[m
	    Date    [31m:[m Time [31m:=[m Clock[31m;[m
	    Event   [31m:[m [01;30mEvent_Type[m[31m([mDated_Message_Type'[01;34mAccess[m[31m);[m
	 [01;34mend[m [01;34mrecord[m[31m;[m
      
      
      
      [01;34mtype[m Dated_Message_Access [01;34mis[m [01;34maccess[m [01;34mall[m Dated_Message_Type[31m;[m
      
      [01;34mprocedure[m Free [01;34mis[m [01;34mnew[m Ada[31m.[m[01;30mUnchecked_Deallocation[m[31m([mDated_Message_Type[31m,[m Dated_Message_Access[31m);[m
      
      [01;34mtype[m Dated_Messages_Set [01;34mis[m [01;34marray[m [31m([mPositive [01;34mrange[m [31m<>)[m [01;34mof[m Dated_Message_Access[31m;[m
      
      [01;34mtask[m [01;34mbody[m Event_Type [01;34mis[m
      [01;34mbegin[m
	 [01;34maccept[m [01;30mInitialize[m[31m([mDevice [31m:[m [01;34min[m Device_Num[31m;[m Message [31m:[m [01;34min[m Long[31m;[m Date [31m:[m [01;34min[m Time[31m;[m Hour [31m:[m [01;34min[m [32mDuration[m[31m)[m [01;34mdo[m
	    Dated_Message[31m.[mDevice_Id [31m:=[m Device[31m;[m
	    Dated_Message[31m.[mMessage [31m:=[m Message[31m;[m
	    Dated_Message[31m.[mDate [31m:=[m Date[31m;[m
	    Dated_Message[31m.[mHour [31m:=[m Hour[31m;[m
	 [01;34mend[m Initialize[31m;[m
	 [01;34mdelay[m [01;34muntil[m Dated_Message[31m.[mDate [31m+[m Dated_Message[31m.[mHour[31m;[m
	 [31m--  if Driver.Instruments = null then[m
	 [31m--     --Put_Line("Event :: no instruments");	    [m
	 [31m--  end if;[m
	 [31m--  --Put_Line("Event :: send to device id =" & Device_Num'Image(dated_Message.Device_Id));[m
	 [31m--  if Driver.Instruments.Orchester(Instrument_Id(Dated_Message.Device_Id)) = null then[m
	 [31m--     --Put_Line("Event :: no device");[m
	 [31m--  elsif Driver.Instruments.Orchester(Instrument_Id(Dated_Message.Device_Id)).Output_Device_Driver = null then[m
	 [31m--     --Put_Line("Event :: no driver");	 [m
	 [31m--  else[m
	 [31m--     --Put_Line("Event :: write to device");[m
	 Driver[31m.[mInstruments[31m.[m[01;30mOrchester[m[31m([m[01;30mInstrument_Id[m[31m([mDated_Message[31m.[mDevice_Id[31m)).[mOutput_Device_Driver[31m.[mOutput_Driver[31m.[m[01;30mReceive[m[31m([mDated_Message[31m.[mMessage[31m);[m
	 [31m--     --Put_Line("Event :: device received");[m
	 [31m--  end if;[m
	 [31m--accept Exhausted;[m
      [01;34mend[m Event_Type[31m;[m
            
      
      Dated_Buffer [31m:[m [01;30mDated_Messages_Set[m[31m([m[35m1[m[31m..[m[35m512[m[31m);[m
      Buffer_Last  [31m:[m Natural [31m:=[m [35m0[m[31m;[m
      End_Of_Task  [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
      
      
   [01;34mbegin[m
      [01;34mwhile[m [01;34mnot[m End_Of_Task [01;34mloop[m
	 [01;34mselect[m	       
	    [31m--  when Buffer_Last >= Dated_buffer'Last =>[m
	    [31m--  	 accept Receive (Device  : in Device_Num;[m
	    [31m--  			 Date    : in Time;[m
	    [31m--  			 Message : in Interfaces.C.Long;[m
	    [31m--  			 Hour    : in Duration;[m
	    [31m--  			 Tempo   : in Tempo_Type) do[m
	    
	    [31m--  	    --Put_Line("Event :: Full");[m
	    [31m--  	 end Receive;[m
	    [31m--  or[m
	    [01;34mwhen[m Buffer_Last [31m<[m Dated_buffer'Last [31m=>[m
	       [01;34maccept[m [01;30mReceive[m [31m([mDevice  [31m:[m [01;34min[m Device_Num[31m;[m
			       Date    [31m:[m [01;34min[m Time[31m;[m
			       Message [31m:[m [01;34min[m Interfaces[31m.[mC[31m.[mLong[31m;[m
			       Hour    [31m:[m [01;34min[m [32mDuration[m[31m;[m
			       Tempo   [31m:[m [01;34min[m Tempo_Type[31m)[m [01;34mdo[m
		  
		  [31m--Put_Line("Event :: receive");[m
		  [01;30mDated_Buffer[m[31m([mBuffer_Last[31m+[m[35m1[m[31m)[m [31m:=[m [01;34mnew[m Dated_Message_Type[31m;[m
		  [31m--Put_Line("Event :: receive new event");[m
		  [01;30mDated_Buffer[m[31m([mBuffer_Last[31m+[m[35m1[m[31m).[mEvent[31m.[m[01;30mInitialize[m[31m([mDevice[31m,[m Message[31m,[m Date[31m,[m Hour[31m);[m		     
		  [31m--Put_Line("Event :: receive new event initialized");[m
		  Buffer_Last [31m:=[m Buffer_Last [31m+[m [35m1[m[31m;[m
	       [01;34mend[m Receive[31m;[m
	       [01;34mif[m Buffer_Last [31m>[m [35m0[m [01;34mthen[m
		  [31m--Put_Line("Event :: buffer not empty");		  [m
	       
		  [01;34mfor[m Buffer_Iter [01;34min[m [35m1[m[31m..([mBuffer_Last[31m)[m [01;34mloop[m
		     [31m--Put_Line("Event :: exhaust...");[m
		     [31m--select [m
		     [31m--Dated_Buffer(Buffer_iter).Event.Exhausted;		     		     [m
		     [01;34mif[m [01;30mDated_Buffer[m[31m([mBuffer_iter[31m)[m [31m/=[m [01;34mnull[m [01;34mand[m [01;34mthen[m
		       [31m([m[01;30mDated_Buffer[m[31m([mBuffer_iter[31m).[mDate [31m+[m
		       [01;30mDated_Buffer[m[31m([mBuffer_iter[31m).[mHour[31m)[m [31m<[m Clock[31m-[m[35m0.25[m [01;34mthen[m
			[31m--Put_Line("Event :: exhausted");[m
			
			[01;30mFree[m[31m([m[01;30mDated_Buffer[m[31m([mBuffer_iter[31m));[m
			[01;34mif[m Buffer_Iter [31m<[m Buffer_Last [01;34mthen[m
			   [01;34mfor[m Rest [01;34min[m Buffer_Iter [31m..[m Buffer_Last [01;34mloop[m
			      
			      [01;30mDated_Buffer[m[31m([mRest[31m)[m [31m:=[m [01;30mDated_Buffer[m[31m([mRest [31m+[m [35m1[m[31m);[m
			   [01;34mend[m [01;34mloop[m[31m;[m		
			   
			   Buffer_Last [31m:=[m Buffer_Last [31m-[m [35m1[m[31m;[m		     		     
			[01;34mend[m [01;34mif[m[31m;[m
		     [31m--or[m
		[31m--	delay 0.005;[m
			[31m--Put_Line("Event :: wait");[m
			
		     [01;34mend[m [01;34mif[m[31m;[m
		     [31m--end select;		  [m
		  [01;34mend[m [01;34mloop[m[31m;[m		  		  
	       [01;34mend[m [01;34mif[m[31m;[m
	       
	 [01;34mor[m 
	    [01;34maccept[m Halt [01;34mdo[m		  		  
	       End_Of_Task [31m:=[m True[31m;[m
	    [01;34mend[m Halt[31m;[m	    	    	    
	 [01;34mend[m [01;34mselect[m[31m;[m

      [01;34mend[m [01;34mloop[m[31m;[m
      [01;30mPut_Line[m[31m([m[31m"Event halted"[m[31m);[m
   [01;34mend[m Event_Process_Type[31m;[m
   
[01;34mend[m Libsens[31m.[mProcessing[31m.[mPlugins[31m;[m
