DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 11264 (0x2c00) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Role, seg_037b14, seg_037b98, seg_038276
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧ └─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦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;
nblk1=a nid=0 hdr6=14 [0x00] rec0=24 rec1=00 rec2=01 rec3=00e [0x01] rec0=1f rec1=00 rec2=04 rec3=03a [0x02] rec0=19 rec1=00 rec2=03 rec3=042 [0x03] rec0=1b rec1=00 rec2=08 rec3=030 [0x04] rec0=00 rec1=00 rec2=07 rec3=01c [0x05] rec0=19 rec1=00 rec2=05 rec3=012 [0x06] rec0=28 rec1=00 rec2=09 rec3=036 [0x07] rec0=01 rec1=00 rec2=06 rec3=066 [0x08] rec0=1f rec1=00 rec2=02 rec3=022 [0x09] rec0=0a rec1=00 rec2=0a rec3=000 tail 0x21530f82284e5668755fb 0x42a00088462060003