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: 7002 (0x1b5a) Types: TextFile Names: »B«
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11 └─ ⟦129cab021⟧ »DATA« └─⟦this⟧
package body Role is package Int_Io is new Text_Io.Integer_Io (Num => Integer); Debut_Trame : constant Character := 'D'; Fin_Trame : constant Character := 'F'; function Creer_Role (Un_Acteur : Acteur) return P_Role is Result : P_Role; begin Result := new Cell_Role; Result.La_Duree := 0; Result.En_Cours := False; Result.L_Acteur := Un_Acteur; Result.L_Etape := Etape.Etape_Vide; Result.L_Index := Etape.Etape_Vide; return Result; end Creer_Role; function Acteur_Du_Role (R : in P_Role) return Acteur is begin return R.L_Acteur; end Acteur_Du_Role; procedure Ajouter_Action_Ds_Role (R : in out P_Role; T : in Etape.Temps; A : in Etape.Action) is Etape_Init : Etape.P_Etape; begin Etape_Init := R.L_Etape; if T > R.La_Duree then R.La_Duree := T; end if; Etape.Ajouter_Etape (E_Modifiee => Etape_Init, Temps_E => T, Action_E => A); R.L_Etape := Etape_Init; end Ajouter_Action_Ds_Role; function Lire_Un_Role (R : in P_Role; A : in Acteur) return P_Role is Un_Temps : Etape.Temps; Une_Action : Etape.Action; Un_Role : P_Role; begin if Role_Est_Vide (R => R) then Un_Role := Creer_Role (Un_Acteur => A); else Un_Role := R; end if; Un_Temps := Intermediate_Code.Get; Une_Action.La_Valeur := Intermediate_Code.Get; if Intermediate_Code.End_Of_Line then Une_Action.La_Transition := 0; else Une_Action.La_Transition := Intermediate_Code.Get; end if; Ajouter_Action_Ds_Role (R => Un_Role, T => Un_Temps, A => Une_Action); Intermediate_Code.Skip_Line; return Un_Role; end Lire_Un_Role; procedure Affiche_Role (R : in P_Role) is E : Etape.P_Etape; begin E := R.L_Etape; Text_Io.Put ("affichage d'un role station : "); Int_Io.Put (R.L_Acteur.Num_Station); Text_Io.Put (" acteur : "); Int_Io.Put (R.L_Acteur.Num_Acteur); Text_Io.Put_Line (""); Etape.Affiche_Etape (E_Affichee => E); Text_Io.Put_Line ("fin de l'affichage du role"); end Affiche_Role; -- procedure Execute_Role (A : Acteur; Ac : Etape.Action) is -- begin -- Text_Io.Put ("execution de la station : "); -- Int_Io.Put (A.Num_Station); -- Text_Io.Put (" l'acteur : "); -- Int_Io.Put (A.Num_Acteur); -- Text_Io.Put (" action : "); -- Int_Io.Put (Ac); -- Text_Io.Put_Line (""); -- end Execute_Role; procedure Envoyer_Trame_10 (A : Acteur; Ac : Etape.Action) is Trame_10 : String (1 .. 10) := "0000000000"; Inter : Integer; String_2 : String (1 .. 2) := "00"; String_4 : String (1 .. 4) := "0000"; begin Trame_10 (1) := Debut_Trame; Trame_10 (10) := Fin_Trame; Inter := A.Num_Station; String_2 := String_Utilities.Number_To_String (Inter, 10, 2); Trame_10 (2 .. 3) := String_2; Inter := A.Num_Acteur; String_2 := String_Utilities.Number_To_String (Inter, 10, 2); Trame_10 (4 .. 5) := String_2; Inter := Ac.La_Valeur; String_4 := String_Utilities.Number_To_String (Inter, 10, 4); Trame_10 (6 .. 9) := String_4; for I in 1 .. 10 loop if Trame_10 (I) = ' ' then Trame_10 (I) := '0'; end if; end loop; Serial_Io.Put (S => Trame_10, Tty => "/dev/tty0"); end Envoyer_Trame_10; procedure Envoyer_Trame_14 (A : Acteur; Ac : Etape.Action) is Trame_14 : String (1 .. 14) := "00000000000000"; Inter : Integer; String_2 : String (1 .. 2) := "00"; String_4 : String (1 .. 4) := "0000"; begin Trame_14 (1) := Debut_Trame; Trame_14 (14) := Fin_Trame; Inter := A.Num_Station; String_2 := String_Utilities.Number_To_String (Inter, 10, 2); Trame_14 (2 .. 3) := String_2; Inter := A.Num_Acteur; String_2 := String_Utilities.Number_To_String (Inter, 10, 2); Trame_14 (4 .. 5) := String_2; Inter := Ac.La_Valeur; String_4 := String_Utilities.Number_To_String (Inter, 10, 4); Trame_14 (6 .. 9) := String_4; Inter := Ac.La_Transition; String_4 := String_Utilities.Number_To_String (Inter, 10, 4); Trame_14 (10 .. 13) := String_4; for I in 1 .. 14 loop if Trame_14 (I) = ' ' then Trame_14 (I) := '0'; end if; end loop; Serial_Io.Put (Trame_14, Tty => "/dev/tty0"); end Envoyer_Trame_14; procedure Execute_Role (A : Acteur; Ac : Etape.Action) is begin if Ac.La_Transition = 0 then Envoyer_Trame_10 (A, Ac); else Envoyer_Trame_14 (A, Ac); end if; end Execute_Role; function Role_Est_Vide (R : in P_Role) return Boolean is begin return (R = Role_Vide); end Role_Est_Vide; function Role_En_Cours (R : in P_Role) return Boolean is begin return R.En_Cours; end Role_En_Cours; function Temps_Role (R : in P_Role) return Etape.Temps is begin return R.La_Duree; end Temps_Role; function Etapes_Du_Role (R : in P_Role) return Etape.P_Etape is begin return R.L_Etape; end Etapes_Du_Role; procedure Demarrer_Role (R : in out P_Role) is begin R.L_Index := Etapes_Du_Role (R => R); if not Etape.Etape_Est_Vide (E_Consultee => R.L_Index) then R.En_Cours := True; end if; end Demarrer_Role; procedure Arreter_Role (R : in out P_Role) is begin R.En_Cours := False; end Arreter_Role; procedure Solliciter_Role (R : in out P_Role; Chrono : in Timer_Moteur.Objet) is begin if Role_En_Cours (R => R) then if Etape.Temps_Etape (E_Consultee => R.L_Index) <= Timer_Moteur.Temps_Moteur (Chrono) then Execute_Role (A => R.L_Acteur, Ac => R.L_Index.L_Action); R.L_Index := R.L_Index.Suivant; if Etape.Etape_Est_Vide (E_Consultee => R.L_Index) then Arreter_Role (R => R); end if; end if; end if; end Solliciter_Role; procedure Jouer_Role (R : in P_Role) is Un_Role : P_Role := R; Role_Chrono : Timer_Moteur.Objet; begin Demarrer_Role (R => Un_Role); Timer_Moteur.Init_Temps (Role_Chrono); Timer_Moteur.Reset_Temps (Role_Chrono); Timer_Moteur.Start_Temps (Role_Chrono); while Role_En_Cours (R => Un_Role) loop Solliciter_Role (R => Un_Role, Chrono => Role_Chrono); end loop; Timer_Moteur.Stop_Temps (Role_Chrono); end Jouer_Role; end Role;