|
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: 16384 (0x4000) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Serveur, seg_059c4e
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with Text_Io; with Asteroide; with Base; with Definitions; use Definitions; with Tir; with Vaisseau; package body Serveur is Bid, C : Character := 'C'; Num_T : Natural := 0; Q : Natural range 0 .. 3 := 0; Tab_Collision : Definitions.Espace := (others => (others => (Definitions.Rien, 0))); Tab_Ptr_Asteroide : array (1 .. 4) of Asteroide.Ptr_Asteroide; Tab_Vaisseau : array (1 .. 2) of Vaisseau.Objet; Tab_Ptr_Tir : array (1 .. 2) of Tir.Ptr_Tir; procedure Inspecter (Acteur1 : in Definitions.Acteur; Pos : in Definitions.Position; Num : in Positive) is Acteur2 : Definitions.Cellule; begin Text_Io.Put_Line ("Acteur1 " & Definitions.Acteur'Image (Acteur1)); Acteur2 := Tab_Collision (Pos.Colonne, Pos.Ligne); Text_Io.Put_Line ("Acteur2 : " & Definitions.Acteur'Image (Acteur2.Nature) & " , " & Integer'Image (Acteur2.Numero)); --Text_Io.Get (Bid); if (Acteur2.Nature = Definitions.Rien) and (Acteur2.Numero = 0) then Text_Io.Put_Line ("#######################################rien"); Asteroide.Deplacer (Tab_Ptr_Asteroide (Num).all); Tab_Collision (Pos.Colonne, Pos.Ligne) := (Acteur1, Num); else if (Acteur2.Nature = Definitions.Ast) or (Acteur1 = Definitions.Ast) then -- 1 des 2 ou les 2 = Asteroide donc mort des 2 acteurs BOOM ! Text_Io.Put_Line ("BBBBBBBBBBBBBBOOOOOOOOOOOOOOOOOOOOOOMMMMMMMMMM"); Tab_Collision (Pos.Colonne, Pos.Ligne) := (Rien, 0); if Acteur1 = Ast then Text_Io.Put_Line (" in ++++++++++++++++"); Asteroide.Detruire (Tab_Ptr_Asteroide (Num).all); case Acteur2.Nature is when Ast => Asteroide.Detruire (Tab_Ptr_Asteroide (Acteur2.Numero).all); when Vais => Vaisseau.Detruire (Tab_Vaisseau (Acteur2.Numero)); when Definitions.Tir => Tir.Detruire (Tab_Ptr_Tir (Acteur2.Numero).all); when Definitions.Base => Base.Detruire (Ma_Base); when others => null; end case; else Asteroide.Detruire (Tab_Ptr_Asteroide (Acteur2.Numero).all); case Acteur1 is when Ast => Asteroide.Detruire (Tab_Ptr_Asteroide (Num).all); when Vais => Vaisseau.Detruire (Tab_Vaisseau (Num)); when Definitions.Tir => Tir.Detruire (Tab_Ptr_Tir (Num).all); when others => null; --jamais end case; end if; else if (Acteur2.Nature = Acteur1) then case Acteur1 is when Vais => Vaisseau.Detruire (Tab_Vaisseau (Num)); Vaisseau.Detruire (Tab_Vaisseau (Acteur2.Numero)); when Definitions.Tir => Tir.Detruire (Tab_Ptr_Tir (Num).all); Tir.Detruire (Tab_Ptr_Tir (Acteur2.Numero).all); when others => null; end case; else if (Acteur2.Nature = Definitions.Tir) or (Acteur1 = Definitions.Tir) then if Acteur1 = Definitions.Tir then Tir.Detruire (Tab_Ptr_Tir (Num).all); if Acteur2.Nature = Definitions.Base then Base.Modifier_Niveau_Energie (1, Ma_Base); else Vaisseau.Modifier_Niveau_Energie (1, Tab_Vaisseau (Acteur2.Numero)); end if; else Tir.Detruire (Tab_Ptr_Tir (Acteur2.Numero).all); Vaisseau.Modifier_Niveau_Energie (1, Tab_Vaisseau (Num)); end if; else Vaisseau.Modifier_Niveau_Energie (1, Tab_Vaisseau (Num)); Base.Modifier_Niveau_Energie (1, Ma_Base); end if; end if; end if; end if; end Inspecter; task body Serveur is Run_Serveur : Boolean := True; Pos_Sauve : Definitions.Position; Num_Sauve : Integer; begin accept Go (Position : in Definitions.Position) do Tab_Collision (Position.Colonne, Position.Ligne) := (Definitions.Base, 1); end Go; for I in 1 .. 4 loop Tab_Ptr_Asteroide (I) := new Asteroide.Objet; accept Ok; Text_Io.Put_Line (" Tache aster cree dynamiquement nun : " & Integer'Image (I)); --Text_Io.Get (Bid); end loop; Text_Io.Put_Line (" Tache serveur en route ..."); while Run_Serveur loop Text_Io.Put_Line (" Tache serveur en attente de accept ..."); select accept Une_Touche (C : in Character; No : in Integer) do Q := 3; --Text_Io.Put_Line --(" Serveur doit envoyer un message a un vaisseau "); --sinon Creer Tir -- cap important pour tir !! --if C/=' ' then -- if c=g h d v ... --Pos_sauve := ... et Num_Sauve :=No --end if; -- else creer tir apres accept --Tab_Ptr_Asteroide (I) := new Asteroide.Ptr_Asteroide; end Une_Touche; or accept Une_Position_Aster (Position : in Definitions.Position; Num : in Natural; Ancienne_Position : in Definitions.Position) do Q := 2; Text_Io.Put_Line (" serveur sert asteroide " & Integer'Image (Num) & " coord(L,C) : " & Integer'Image (Position.Colonne) & " , " & Integer'Image (Position.Ligne)); Text_Io.Put_Line (Integer'Image (Ancienne_Position.Colonne) & " , " & Integer'Image (Ancienne_Position.Ligne)); if Ancienne_Position /= (10, 10) then Tab_Collision (Ancienne_Position.Colonne, Ancienne_Position.Ligne) := (Rien, 0); Text_Io.Put_Line (" ok "); end if; Pos_Sauve := Position; Num_Sauve := Num; --Text_Io.Get (Bid); end Une_Position_Aster; or accept Une_Position_Tir (Position : in Definitions.Position; Num : in Natural) do Q := 1; Text_Io.Put_Line (" serveur sert tir " & Integer'Image (Num) & " coord(L,C) : " & Integer'Image (Position.Colonne) & " , " & Integer'Image (Position.Ligne)); Pos_Sauve := Position; Num_Sauve := Num; end Une_Position_Tir; or accept Stop do Text_Io.Put_Line ("Arret du Serveur"); Run_Serveur := False; end Stop; or accept Avertir (Position : in Definitions.Position) do Text_Io.Put_Line ("aster se reinit"); Tab_Collision (Position.Colonne, Position.Ligne) := (Rien, 0); end Avertir; --else --delay 0.01; end select; case Q is when 0 => null; when 2 => Text_Io.Put_Line (" cas aster "); Inspecter (Definitions.Ast, Pos_Sauve, Num_Sauve); when 1 => Text_Io.Put_Line (" cas tir "); Inspecter (Definitions.Tir, Pos_Sauve, Num_Sauve); when 3 => Text_Io.Put_Line (" cas vaisseau "); --Inspecter (Definitions.Vais, Pos_Sauve, Num_Sauve); end case; Q := 0; end loop; --Run_Serveur = False si on sort de loop for I in 1 .. 4 loop Asteroide.Detruire (Tab_Ptr_Asteroide (I).all); end loop; end Serveur; -- terms : array (1..n) of terminal.handle; -- Terms (1) := Mon_Terminal.Creer (No => 1); -- Mon_Terminal.Ecrire (Terminal => Terms (1), -- handle -- C => C, -- caractere a ecrire -- X => X, -- Y => Y, -- Blink => Blink); -- procedure Traiter_Caractere (C : in Character; No : in Integer) is -- begin -- Text_Io.Put_Line ("Le terminal " & Integer'Image (No) & -- " a frappe le caractere " & C); -- Serveur.rendez-vous(No, C); -- end Traiter_Caractere; end Serveur;
nblk1=f nid=9 hdr6=16 [0x00] rec0=22 rec1=00 rec2=01 rec3=08e [0x01] rec0=14 rec1=00 rec2=0d rec3=016 [0x02] rec0=0b rec1=00 rec2=0b rec3=046 [0x03] rec0=16 rec1=00 rec2=08 rec3=05e [0x04] rec0=14 rec1=00 rec2=07 rec3=01c [0x05] rec0=1e rec1=00 rec2=06 rec3=008 [0x06] rec0=18 rec1=00 rec2=05 rec3=052 [0x07] rec0=10 rec1=00 rec2=04 rec3=064 [0x08] rec0=1c rec1=00 rec2=0c rec3=002 [0x09] rec0=1e rec1=00 rec2=0e rec3=000 [0x0a] rec0=1b rec1=00 rec2=03 rec3=000 [0x0b] rec0=1b rec1=00 rec2=03 rec3=000 [0x0c] rec0=1f rec1=00 rec2=03 rec3=048 [0x0d] rec0=0e rec1=00 rec2=02 rec3=000 [0x0e] rec0=0c rec1=00 rec2=0a rec3=001 tail 0x21769033089154fc0ab7a 0x42a00088462060003 Free Block Chain: 0x9: 0000 00 02 00 99 80 10 69 6e 69 74 69 6f 6e 73 2e 42 ┆ initions.B┆ 0x2: 0000 00 0f 01 ca 80 14 2d 20 63 61 72 61 63 74 65 72 ┆ - caracter┆ 0xf: 0000 00 0a 01 4b 80 0e 73 2e 50 6f 73 69 74 69 6f 6e ┆ K s.Position┆ 0xa: 0000 00 00 01 77 80 0b 20 20 20 20 59 20 3d 3e 20 59 ┆ w Y => Y┆