DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ B T ┃
Length: 7776 (0x1e60) Types: TextFile Names: »B«
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04 └─ ⟦d65440be7⟧ »DATA« └─⟦this⟧
with Text_Io; use Text_Io; package body Motor_Role is Time_Value : Integer := 0; function Time_System return Time is begin return Time_Value; end Time_System; procedure Step_Time is begin delay (0.1); Time_Value := Time_Value + 1; end Step_Time; procedure Reset_Time is begin Time_Value := 0; end Reset_Time; procedure Execute (A : Actor; Ac : Action) is begin [statement] end Execute; function Create_A_Role (An_Actor : Actor) return Role is Result : Role; begin Result := new Cell_Role; Result.In_Process := False; Result.The_Actor := An_Actor; Result.The_Step := Empty_Step; Result.The_Time := 0; return Result; end Create_A_Role; function Read_A_Role (F : File_Type) return Role is An_Actor : Actor; A_Time : Time; An_Action : Action; N, I : Integer; A_Role : Role; begin An_Actor := Read_An_Actor (F); A_Role := Create_A_Role (An_Actor => An_Actor); N := Read_Nb_Of_Step (F); for I in 1 .. N loop A_Time := Read_A_Time (F); An_Action := Read_An_Action (F); Put_Action_In_Role (A_Role, A_Time, An_Action); end loop; return A_Role; end Read_A_Role; function Number_Of_Actions_Of_Role (R : Role) return Integer is A_Step : P_Step; N : Integer; begin N := 0; A_Step := Step_Of_Role (R); while A_Step /= Empty_Step loop N := N + 1; A_Step := Step_Next (A_Step); end loop; return N; end Number_Of_Actions_Of_Role; function Role_Empty (R : Role) return Boolean is begin return (Step_Of_Role (R) = Empty_Step); end Role_Empty; function Time_Of_Role (R : Role) return Time is begin return R.The_Time; end Time_Of_Role; function Actor_Of_Role (R : Role) return Actor is begin return R.The_Actor; end Actor_Of_Role; function Role_In_Process (R : Role) return Boolean is begin return R.In_Process; end Role_In_Process; function Step_Of_Role (The_Role : Role) return P_Step is begin return The_Role.The_Step; end Step_Of_Role; procedure Witch_Action_In_Role (R : Role; T : Time; A : in out Action; Existe : out Boolean) is A_Step : P_Step; Finish : Boolean; begin Existe := False; Finish := False; A_Step := Step_Of_Role (R); while ((A_Step /= Empty_Step) and not Finish) loop if Step_Time (A_Step) = T then Finish := True; Existe := True; A := Step_Action (A_Step); else if Step_Time (A_Step) > T then Finish := True; else A_Step := Step_Next (A_Step); end if; end if; end loop; end Witch_Action_In_Role; procedure Put_Action_In_Role (R : in out Role; T : Time; A : Action) is Tmp_Step : P_Step; begin Tmp_Step := Step_Of_Role (R); Input_Action_In_Step (Tmp_Step, T, A); if T > R.The_Time then R.The_Time := T; end if; end Put_Action_In_Role; procedure Extract_Action_Of_Role (R : in out Role; T : Time) is A_Step : P_Step; A_Time : Time; begin A_Step := Step_Of_Role (R); Extract_Action_Of_Step (A_Step, T); if T = R.The_Time then R.The_Time := 0; A_Step := Step_Of_Role (R); while (A_Step /= Empty_Step) loop A_Time := Step_Time (A_Step); if A_Time > R.The_Time then R.The_Time := A_Time; end if; A_Step := Step_Next (A_Step); end loop; end if; end Extract_Action_Of_Role; procedure Delay_Action_Of_Role (R : in out Role; T : Time; D : Delai) is New_Time : Time; begin New_Time := T + D; if New_Time >= 0 then Move_Action_Of_Role (R, T, New_Time); else Text_Io.Put_Line ("danger !!!! decalage dans le temps interdit"); end if; end Delay_Action_Of_Role; procedure Move_Action_Of_Role (R : in out Role; Old_Time : Time; New_Time : Time) is An_Action : Action; Exist : Boolean; begin Witch_Action_In_Role (R, Old_Time, An_Action, Exist); if Exist then Extract_Action_Of_Role (R, Old_Time); Put_Action_In_Role (R, New_Time, An_Action); end if; end Move_Action_Of_Role; procedure Delay_Role (R : in out Role; D : Delai) is A_Step : P_Step; A_Time : Time; begin if not Role_Empty (R) then A_Step := Step_Of_Role (R); if (Step_Time (A_Step) + D) >= 0 then while (A_Step /= Empty_Step) loop A_Time := Step_Time (A_Step) + D; Change_Time_Of_Step (A_Step, A_Time); A_Step := Step_Next (A_Step); end loop; R.The_Time := R.The_Time + D; else Put_Line (" attention delai beaucoup trop negatif"); end if; end if; end Delay_Role; procedure Empty_Role (R : in out Role) is Kill_Step : P_Step; begin while R.The_Step /= Empty_Step loop Kill_Step := R.The_Step; R.The_Step := Step_Next (Kill_Step); Destruct_Step (Kill_Step); end loop; end Empty_Role; procedure Run_Role (R : in out Role) is begin R.The_Index := Step_Of_Role (R); if R.The_Index /= Empty_Step then begin R.In_Process := True; R.The_Begining := Time_System; end; end if; end Run_Role; procedure Stop_Role (R : in out Role) is begin R.In_Process := False; end Stop_Role; procedure Sollicit_Role (R : in out Role) is Who : Actor; What : Action; begin if Role_In_Process (R) then if (Step_Time (R.The_Index) <= (Time_System - R.The_Begining)) then Who := Actor_Of_Role (R); What := Step_Action (R.The_Index); Execute (Who, What); R.The_Index := Step_Next (R.The_Index); if R.The_Index = Empty_Step then Stop_Role (R); end if; end if; else Put_Line (" on ne peut pas solliciter un role qui n'est pas en cours !!!"); end if; end Sollicit_Role; procedure Play_Role (R : in out Role) is begin Run_Role (R); while Role_In_Process (R) loop Sollicit_Role (R); end loop; end Play_Role; procedure Save_Role (R : Role; F : File_Type) is A_Step : P_Step; An_Actor : Actor; An_Action : Action; A_Time : Time; N : Integer; begin An_Actor := Actor_Of_Role (R); Save_Actor (F, An_Actor); N := Number_Of_Actions_Of_Role (R); Save_Nb_Action_Of_Role (F, N); A_Step := Step_Of_Role (R); while A_Step /= Empty_Step loop A_Time := Step_Time (A_Step); Save_Time (F, A_Time); An_Action := Step_Action (A_Step); Save_Action (F, An_Action); A_Step := Step_Next (A_Step); end loop; end Save_Role; end Motor_Role;