|
|
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 - metrics - 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┆