|
|
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: 45056 (0xb000)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Consult_Structure, seg_048d8a
└─⟦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 Nos_Listes;
with Structure_Des_Variables;
with Nos_Listes;
use Structure_Des_Variables;
package body Consult_Structure is
procedure Copy_Type_Direction
(Target : in out Type_Direction; Source : Type_Direction) is
begin
Nos_Chaines.Copy (Target.Direction, Source.Direction);
Target.Communication := Source.Communication;
end Copy_Type_Direction;
---------------------------------------------------------------
--|
--| Renvoie le type d'une variable. Si cette variable n'existe
--| pas, la routine renverra le type 'Sans_Type'.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable sur laquelle porte la
--| recherche.
--| (type Nos_Chaines.String_Text)
--|
---------------------------------------------------------------
function Consult_Type
(Nom_Variable : Nos_Chaines.String_Text) return Enum_Type is
Trouve : Boolean;
Variable_De_Recherche : Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
if Trouve then
return Variable_De_Recherche.Type_Variable;
else
return Sans_Type;
end if;
end Consult_Type;
---------------------------------------------------------------
--|
--| Renvoie la valeur d'une variable de type compteur.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable sur laquelle porte la
--| recherche.
--| (type Nos_Chaines.String_Text)
--|
---------------------------------------------------------------
function Consult_Valeur
(Nom_Variable : Nos_Chaines.String_Text) return Integer is
Trouve : Boolean;
Variable_De_Recherche : Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
if Trouve then
if (Variable_De_Recherche.Type_Variable = Compteur) then
return Variable_De_Recherche.Specif.Valeur_Compteur;
end if;
end if;
end Consult_Valeur;
---------------------------------------------------------------
--|
--| Renvoie la signification d'une variable de type
--| Preposition ou Verbe.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable sur laquelle porte la
--| recherche.
--| (type Nos_Chaines.String_Text)
--|
---------------------------------------------------------------
function Consult_Signification (Nom_Variable : Nos_Chaines.String_Text)
return Nos_Chaines.String_Text is
Trouve : Boolean;
Variable_De_Recherche : Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
Text_Io.Put_Line (Boolean'Image (Trouve));
if Trouve then
case Variable_De_Recherche.Type_Variable is
when Verbe | Preposition =>
return Variable_De_Recherche.Specif.Signification;
when others =>
null;
end case;
end if;
end Consult_Signification;
---------------------------------------------------------------
--|
--| Recherche si un Etat donne appartient bien a une
--| variable donnee.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable sur laquelle porte la
--| recherche.
--| (type Nos_Chaines.String_Text)
--| Etat : l'etat recherche
--| (type Nos_Chaines.String_Text)
--| Sens : le sens concerne par la recherche (utile dans le
--| cas d'une communication)
--| (type Enum_sens)
--|
---------------------------------------------------------------
function Etat_Belong_To (Nom_Variable : Nos_Chaines.String_Text;
Etat : Nos_Chaines.String_Text;
Sens : Enum_Sens) return Boolean is
Trouve : Boolean;
Variable_De_Recherche : Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
if Trouve then
case Variable_De_Recherche.Type_Variable is
when Communication =>
case Sens is
when Sens1 =>
return Liste_Etat.Found
(Variable_De_Recherche.Specif.
Sens1.Etat_Communication, Etat);
when Sens2 =>
return Liste_Etat.Found
(Variable_De_Recherche.Specif.
Sens2.Etat_Communication, Etat);
when Les_Deux_Sens =>
return (Liste_Etat.Found
(Variable_De_Recherche.Specif.
Sens1.Etat_Communication, Etat) and
Liste_Etat.Found
(Variable_De_Recherche.Specif.
Sens2.Etat_Communication, Etat));
when others =>
return False;
end case;
when Lieu =>
return Liste_Etat.Found
(Variable_De_Recherche.Specif.Etat_Lieu, Etat);
when Objet =>
return Liste_Etat.Found
(Variable_De_Recherche.Specif.Etat_Objet, Etat);
when Personnage =>
return
Liste_Etat.Found
(Variable_De_Recherche.Specif.Etat_Personnage, Etat);
when others =>
return False;
end case;
else
return False;
end if;
end Etat_Belong_To;
---------------------------------------------------------------
--|
--| Recherche si un objet fait bien partie des possessions d'une
--| variable de type Personnage donnee.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable sur laquelle porte la
--| recherche.
--| (type Nos_Chaines.String_Text)
--| Possession : l'objet recherche
--| (type Nos_Chaines.String_Text)
--|
---------------------------------------------------------------
function Possession_Belong_To
(Nom_Variable : Nos_Chaines.String_Text;
Possession : Nos_Chaines.String_Text) return Boolean is
Trouve : Boolean;
Variable_De_Recherche, Le_Objet : Cellule;
La_Possession : P_Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
if Trouve then
Le_Objet.Nom := Possession;
Structure_Des_Variables.Find (Le_Objet, Trouve);
if Trouve then
La_Possession := new Cellule;
La_Possession.all := Le_Objet;
case Variable_De_Recherche.Type_Variable is
when Personnage =>
return Liste_Possession.Found
(Variable_De_Recherche.Specif.
Possession_Personnage, La_Possession);
when others =>
return False;
end case;
else
return False;
end if;
else
return False;
end if;
end Possession_Belong_To;
---------------------------------------------------------------
--|
--| Recherche si un objet fait bien partie du contenu d'une
--| variable de type Objet donnee.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable sur laquelle porte la
--| recherche.
--| (type Nos_Chaines.String_Text)
--| Contenu : l'objet recherche
--| (type Nos_Chaines.String_Text)
--|
---------------------------------------------------------------
function Contenu_Belong_To
(Nom_Variable : Nos_Chaines.String_Text;
Contenu : Nos_Chaines.String_Text) return Boolean is
Trouve : Boolean;
Variable_De_Recherche, Le_Objet : Cellule;
Le_Contenu : P_Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
if Trouve then
Le_Objet.Nom := Contenu;
Structure_Des_Variables.Find (Le_Objet, Trouve);
if Trouve then
Le_Contenu := new Cellule;
Le_Contenu.all := Le_Objet;
case Variable_De_Recherche.Type_Variable is
when Objet =>
return Liste_Contenu.Found
(Variable_De_Recherche.Specif.Contenu_Objet,
Le_Contenu);
when others =>
return False;
end case;
else
return False;
end if;
else
return False;
end if;
end Contenu_Belong_To;
---------------------------------------------------------------
--|
--| Renvoie la Description d'une variable donnee.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable
--| (type Nos_Chaines.String_Text)
--| Sens : le sens concerne par la recherche (utile dans le
--| cas d'une communication)
--| (type Enum_sens)
--|
---------------------------------------------------------------
function Consult_Description (Nom_Variable : Nos_Chaines.String_Text;
Sens : Structure_Des_Variables.Enum_Sens)
return Nos_Chaines.String_Text is
Trouve : Boolean;
Variable_De_Recherche : Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
if Trouve then
case Variable_De_Recherche.Type_Variable is
when Communication =>
case Sens is
when Sens1 | Les_Deux_Sens =>
return Variable_De_Recherche.Specif.Sens1.
Description_Communication;
when Sens2 =>
return Variable_De_Recherche.Specif.Sens2.
Description_Communication;
when others =>
null;
end case;
when Lieu =>
return Variable_De_Recherche.Specif.Description_Lieu;
when Objet =>
return Variable_De_Recherche.Specif.Description_Objet;
when Personnage =>
return Variable_De_Recherche.Specif.Description_Personnage;
when others =>
null;
end case;
end if;
end Consult_Description;
---------------------------------------------------------------
--|
--| Renvoie la valeur du champ Existence d'une variable donnee.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable sur laquelle porte la
--| recherche.
--| (type Nos_Chaines.String_Text)
--|
---------------------------------------------------------------
function Consult_Existence
(Nom_Variable : Nos_Chaines.String_Text) return Boolean is
Trouve : Boolean;
Variable_De_Recherche : Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
if Trouve then
return Variable_De_Recherche.Existe;
else
return False;
end if;
end Consult_Existence;
---------------------------------------------------------------
--|
--| Verifie qu'une variable a bien ete declaree.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable
--| (type Nos_Chaines.String_Text)
--|
---------------------------------------------------------------
function Is_In_Structure
(Nom_Variable : Nos_Chaines.String_Text) return Boolean is
Trouve : Boolean;
Variable_De_Recherche : Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
if Trouve then
return True;
else
return False;
end if;
end Is_In_Structure;
---------------------------------------------------------------
--|
--| Renvoie la valeur du champ Position d'une variable donnee.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable sur laquelle porte la
--| recherche.
--| (type Nos_Chaines.String_Text)
--|
---------------------------------------------------------------
function Consult_Position (Nom_Variable : Nos_Chaines.String_Text)
return Nos_Chaines.String_Text is
Trouve : Boolean;
Variable_De_Recherche : Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
if Trouve then
case Variable_De_Recherche.Type_Variable is
when Objet =>
return Consult_Position (Variable_De_Recherche.
Specif.Position_Objet.Nom);
when Personnage =>
return Consult_Position (Variable_De_Recherche.Specif.
Position_Personnage.Nom);
when Lieu =>
return Variable_De_Recherche.Nom;
when others =>
null;
end case;
else
return Nos_Chaines.Infinite_String.Value (" ");
end if;
end Consult_Position;
---------------------------------------------------------------
--|
--| Renvoie la valeur du champ Source d'une variable de type
--| Communication.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable sur laquelle porte la
--| recherche.
--| (type Nos_Chaines.String_Text)
--| Sens : le sens concerne par la recherche
--| (type Enum_sens)
--|
---------------------------------------------------------------
function Consult_Source
(Nom_Variable : Nos_Chaines.String_Text; Sens : Enum_Sens)
return Nos_Chaines.String_Text is
Trouve : Boolean;
Variable_De_Recherche : Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
if Trouve then
case Variable_De_Recherche.Type_Variable is
when Communication =>
case Sens is
when Sens1 =>
return Variable_De_Recherche.
Specif.Sens1.Source.Nom;
when Sens2 =>
return Variable_De_Recherche.
Specif.Sens2.Source.Nom;
when others =>
null;
end case;
when others =>
null;
end case;
end if;
end Consult_Source;
---------------------------------------------------------------
--|
--| Renvoie la valeur du champ Source d'une variable de type
--| Communication.
--|
--| Parametres d'entree :
--| Nom_Variable : nom de la variable sur laquelle porte la
--| recherche.
--| (type Nos_Chaines.String_Text)
--| Sens : le sens concerne par la recherche
--| (type Enum_sens)
--|
---------------------------------------------------------------
function Consult_Destination
(Nom_Variable : Nos_Chaines.String_Text; Sens : Enum_Sens)
return Nos_Chaines.String_Text is
Trouve : Boolean;
Variable_De_Recherche : Cellule;
begin
Nos_Chaines.Copy (Variable_De_Recherche.Nom, Nom_Variable);
Structure_Des_Variables.Find (Variable_De_Recherche, Trouve);
if Trouve then
case Variable_De_Recherche.Type_Variable is
when Communication =>
case Sens is
when Sens1 =>
return Variable_De_Recherche.Specif.
Sens1.Destination.Nom;
when Sens2 =>
return
Variable_De_Recherche.Specif.
Sens2.Destination.Nom;
when others =>
null;
end case;
when others =>
null;
end case;
end if;
end Consult_Destination;
---------------------------------------------------------------
--|
--| Compare les etats de deux variables de meme type.
--|
--| Parametres d'entree :
--| Variable1 : nom de la premiere variable.
--| (type cellule)
--| Variable2 : nom de la deuxieme variable.
--| (type cellule)
--| Sens : le sens concerne pour la comparaison des etats
--| d'une communication.
--| (type Enum_sens)
--|
---------------------------------------------------------------
function Compare_Etat (Variable1, Variable2 : Cellule; Sens : Enum_Sens)
return Boolean is
Resultat : Boolean;
begin
case Variable1.Type_Variable is
when Communication =>
case Sens is
when Sens1 =>
Resultat := Liste_Etat.Compare (Variable1.Specif.Sens1.
Etat_Communication,
Variable2.Specif.Sens1.
Etat_Communication);
when Sens2 =>
Resultat := Liste_Etat.Compare (Variable1.Specif.Sens2.
Etat_Communication,
Variable2.Specif.Sens2.
Etat_Communication);
when Les_Deux_Sens =>
Resultat := ((Liste_Etat.Compare
(Variable1.Specif.Sens1.
Etat_Communication,
Variable2.Specif.Sens1.
Etat_Communication)) and
(Liste_Etat.Compare
(Variable1.Specif.Sens1.
Etat_Communication,
Variable2.Specif.Sens1.
Etat_Communication)));
when others =>
Resultat := False;
end case;
when Lieu =>
Resultat := Liste_Etat.Compare (Variable1.Specif.Etat_Lieu,
Variable2.Specif.Etat_Lieu);
when Objet =>
Resultat := Liste_Etat.Compare (Variable1.Specif.Etat_Objet,
Variable2.Specif.Etat_Objet);
when Personnage =>
Resultat := Liste_Etat.Compare
(Variable1.Specif.Etat_Personnage,
Variable2.Specif.Etat_Personnage);
when others =>
Resultat := False;
end case;
return Resultat;
end Compare_Etat;
---------------------------------------------------------------
--|
--| Compare la position de deux variables de meme type.
--|
--| Parametres d'entree :
--| Variable1 : nom de la premiere variable.
--| (type cellule)
--| Variable2 : nom de la deuxieme variable.
--| (type cellule)
--|
---------------------------------------------------------------
function Compare_Position (Variable1, Variable2 : Cellule) return Boolean is
Resultat : Boolean;
begin
case Variable1.Type_Variable is
when Objet =>
Resultat := (Nos_Chaines.Equal
(Variable1.Specif.Position_Objet.Nom,
Variable2.Specif.Position_Objet.Nom));
when Personnage =>
Resultat := (Nos_Chaines.Equal
(Variable1.Specif.Position_Personnage.Nom,
Variable2.Specif.Position_Personnage.Nom));
when others =>
Resultat := False;
end case;
return Resultat;
end Compare_Position;
---------------------------------------------------------------
--|
--| Compare deux champs de deux variables de meme type (seules
--| les comparaisons, des champs qui presente un interet a
--| etre compares, sont traitees).
--|
--| Parametres d'entree :
--| Nom_Variable1 : nom de la premiere variable.
--| (type Nos_Chaines.String_Text)
--| Nom_Variable2 : nom de la deuxieme variable.
--| (type Nos_Chaines.String_Text)
--| Attribut : type du champ a comparer
--| (type enum_champ)
--| Sens : le sens concerne pour la comparaison des etats
--| (type Enum_sens)
--|
---------------------------------------------------------------
function Compare_Attribut
(Nom_Variable1, Nom_Variable2 : Nos_Chaines.String_Text;
Attribut : Structure_Des_Variables.Enum_Champ;
Sens : Structure_Des_Variables.Enum_Sens) return Boolean is
Resultat, Trouve1, Trouve2 : Boolean;
Variable_De_Recherche1, Variable_De_Recherche2 : Cellule;
begin
Resultat := False;
Nos_Chaines.Copy (Variable_De_Recherche1.Nom, Nom_Variable1);
Nos_Chaines.Copy (Variable_De_Recherche2.Nom, Nom_Variable2);
Structure_Des_Variables.Find (Variable_De_Recherche1, Trouve1);
Structure_Des_Variables.Find (Variable_De_Recherche2, Trouve2);
if (Trouve1 and Trouve2) then
if (Variable_De_Recherche1.Type_Variable =
(Variable_De_Recherche2.Type_Variable)) then
case Attribut is
when Contenu =>
if (Variable_De_Recherche1.Type_Variable = Objet) then
Resultat := Liste_Contenu.Compare
(Variable_De_Recherche1.
Specif.Contenu_Objet,
Variable_De_Recherche2.
Specif.Contenu_Objet);
end if;
when Etat =>
Resultat := Compare_Etat (Variable_De_Recherche1,
Variable_De_Recherche2, Sens);
when Position =>
Resultat := Compare_Position (Variable_De_Recherche1,
Variable_De_Recherche2);
when Possession =>
if (Variable_De_Recherche1.Type_Variable =
Personnage) then
Resultat := Liste_Possession.Compare
(Variable_De_Recherche1.
Specif.Possession_Personnage,
Variable_De_Recherche2.Specif.
Possession_Personnage);
end if;
when Valeur =>
if (Variable_De_Recherche1.Type_Variable =
Compteur) then
Resultat := (Variable_De_Recherche1.
Specif.Valeur_Compteur =
Variable_De_Recherche2.
Specif.Valeur_Compteur);
end if;
when others =>
null;
end case;
end if;
end if;
return Resultat;
end Compare_Attribut;
---------------------------------------------------------------
--|
--|
---------------------------------------------------------------
procedure Consult_Sortie (Le_Lieu : Nos_Chaines.String_Text;
La_Destination : in out Nos_Chaines.String_Text;
Variable_Communication : Cellule;
Le_Sens : in out Integer;
Trouve : out Boolean) is
begin
if (Variable_Communication.Specif.Sens1.Source /= null) then
Text_Io.Put_Line ("source sens 1 <> null");
if (Nos_Chaines.Equal
(Variable_Communication.Specif.Sens1.Source.Nom,
Le_Lieu)) then
Trouve := True;
Text_Io.Put_Line ("ce sera le sens 1");
Le_Sens := 1;
Nos_Chaines.Copy (La_Destination, Variable_Communication.Specif.
Sens1.Destination.Nom);
else
if (Variable_Communication.Specif.Sens2.Source /= null) then
Text_Io.Put_Line ("source sens 2 <> null");
if (Nos_Chaines.Equal
(Variable_Communication.Specif.Sens2.Source.Nom,
Le_Lieu)) then
Trouve := True;
Text_Io.Put_Line ("ce sera le sens 2");
Le_Sens := 2;
Nos_Chaines.Copy (La_Destination,
Variable_Communication.Specif.
Sens2.Destination.Nom);
else
Trouve := False;
Le_Sens := 0;
Nos_Chaines.Copy (La_Destination, "");
end if;
else
Text_Io.Put_Line ("no solution");
Trouve := False;
Le_Sens := 0;
Nos_Chaines.Copy (La_Destination, "");
end if;
end if;
end if;
Text_Io.Put ("je quitte consult_sortie avec destination =");
Nos_Chaines.Print_Line (La_Destination);
end Consult_Sortie;
---------------------------------------------------------------
--|
--|
---------------------------------------------------------------
procedure Communication_Belong_To_Lieu
(Le_Lieu : Nos_Chaines.String_Text;
La_Communication : Nos_Chaines.String_Text;
La_Destination : in out Nos_Chaines.String_Text;
Le_Sens : in out Integer;
Trouve : out Boolean) is
La_Sortie : Type_Direction;
Found1, Found2, Trouve1, Trouve2 : Boolean;
Variable_Lieu, Variable_Communication : Cellule;
Iterateur_Direction : Liste_Direction.Iterateur;
begin
Found1 := False;
Found2 := False;
Nos_Chaines.Copy (Variable_Lieu.Nom, Le_Lieu);
Nos_Chaines.Copy (Variable_Communication.Nom, La_Communication);
Structure_Des_Variables.Find (Variable_Lieu, Trouve1);
Structure_Des_Variables.Find (Variable_Communication, Trouve2);
if (Trouve1 and Trouve2 and (Variable_Lieu.Type_Variable = Lieu) and
(Variable_Communication.Type_Variable = Communication)) then
Liste_Direction.First (Iterateur_Direction,
Variable_Lieu.Specif.Direction_Lieu);
while ((not Found1) and (not Liste_Direction.At_End
(Iterateur_Direction))) loop
La_Sortie := Liste_Direction.Consult (Iterateur_Direction);
if (La_Sortie.Communication /= null) then
Found1 := Nos_Chaines.Equal (La_Communication,
La_Sortie.Communication.Nom);
if Found1 then
Consult_Sortie (Le_Lieu, La_Destination,
Variable_Communication,
Le_Sens, Found2);
end if;
end if;
Liste_Direction.Next (Iterateur_Direction);
end loop;
else
Le_Sens := 0;
Nos_Chaines.Copy (La_Destination, "");
end if;
Trouve := (Found1 and Found2);
end Communication_Belong_To_Lieu;
---------------------------------------------------------------
--|
--|
---------------------------------------------------------------
procedure Destination_Belong_To_Lieu
(Le_Lieu : Nos_Chaines.String_Text;
La_Destination : in out Nos_Chaines.String_Text;
Le_Sens : in out Integer;
Trouve : out Boolean) is
La_Sortie : Type_Direction;
Found, Trouve1, Trouve2 : Boolean;
Variable_Lieu, Variable_Communication : Cellule;
Iterateur_Direction : Liste_Direction.Iterateur;
begin
Text_Io.Put ("lieu de depart : ");
Nos_Chaines.Print_Line (Le_Lieu);
Text_Io.Put ("destination : ");
Nos_Chaines.Print_Line (La_Destination);
Found := False;
Nos_Chaines.Copy (Variable_Lieu.Nom, Le_Lieu);
Structure_Des_Variables.Find (Variable_Lieu, Trouve1);
if (Trouve1 and (Variable_Lieu.Type_Variable = Lieu)) then
Liste_Direction.First (Iterateur_Direction,
Variable_Lieu.Specif.Direction_Lieu);
while ((not Found) and (not Liste_Direction.At_End
(Iterateur_Direction))) loop
Copy_Type_Direction (La_Sortie, Liste_Direction.Consult
(Iterateur_Direction));
if (La_Sortie.Communication /= null) then
-- Nos_Chaines.Copy (Variable_Communication.Nom,
-- La_Sortie.Communication.Nom);
Variable_Communication.Nom := La_Sortie.Communication.Nom;
Structure_Des_Variables.Find
(Variable_Communication, Trouve2);
if (Trouve2 and (Variable_Communication.Type_Variable =
Communication)) then
Text_Io.Put ("la communication existe son nom est ");
Nos_Chaines.Print_Line (Variable_Communication.Nom);
if (Variable_Communication.Specif.Sens1.Source /=
null) then
Text_Io.Put ("source ds sens1");
Nos_Chaines.Print_Line (Variable_Communication.
Specif.Sens1.Source.Nom);
if Nos_Chaines.Equal
(Variable_Communication.
Specif.Sens1.Source.Nom, Le_Lieu) then
if Nos_Chaines.Equal
(Variable_Communication.
Specif.Sens1.Destination.Nom,
La_Destination) then
Found := True;
Le_Sens := 1;
end if;
else
if (Variable_Communication.
Specif.Sens2.Source /= null) then
Text_Io.Put ("source ds sens2");
Nos_Chaines.Print_Line
(Variable_Communication.
Specif.Sens2.Source.Nom);
if Nos_Chaines.Equal
(Variable_Communication.
Specif.Sens2.Source.Nom,
Le_Lieu) then
if Nos_Chaines.Equal
(Variable_Communication.
Specif.Sens2.Destination.Nom,
La_Destination) then
Found := True;
Le_Sens := 2;
end if;
end if;
end if;
end if;
else
if (Variable_Communication.Specif.Sens2.Source /=
null) then
if Nos_Chaines.Equal
(Variable_Communication.
Specif.Sens2.Source.Nom, Le_Lieu) then
if Nos_Chaines.Equal
(Variable_Communication.
Specif.Sens2.Destination.Nom,
La_Destination) then
Found := True;
Le_Sens := 2;
end if;
end if;
end if;
end if;
end if;
end if;
Liste_Direction.Next (Iterateur_Direction);
Text_Io.Put_Line (" found vaut " & Boolean'Image (Found));
end loop;
end if;
if not Found then
Le_Sens := 0;
Nos_Chaines.Copy (La_Destination, "");
end if;
Trouve := Found;
end Destination_Belong_To_Lieu;
---------------------------------------------------------------
--|
--|
---------------------------------------------------------------
procedure Direction_Belong_To_Lieu
(Le_Lieu : Nos_Chaines.String_Text;
La_Direction : Nos_Chaines.String_Text;
La_Destination : in out Nos_Chaines.String_Text;
Le_Sens : in out Integer;
Trouve : out Boolean) is
La_Sortie : Type_Direction;
Found, Trouve1, Trouve2 : Boolean;
Variable_Lieu, Variable_Communication : Cellule;
Iterateur_Direction : Liste_Direction.Iterateur;
begin
Text_Io.Put ("lieu de depart : ");
Nos_Chaines.Print_Line (Le_Lieu);
Text_Io.Put ("direction : ");
Nos_Chaines.Print_Line (La_Direction);
Found := False;
Nos_Chaines.Copy (Variable_Lieu.Nom, Le_Lieu);
Structure_Des_Variables.Find (Variable_Lieu, Trouve1);
if (Trouve1 and (Variable_Lieu.Type_Variable = Lieu)) then
Liste_Direction.First (Iterateur_Direction,
Variable_Lieu.Specif.Direction_Lieu);
while ((not Found) and (not Liste_Direction.At_End
(Iterateur_Direction))) loop
Copy_Type_Direction (La_Sortie, Liste_Direction.Consult
(Iterateur_Direction));
Nos_Chaines.Print (La_Sortie.Direction);
Nos_Chaines.Print_Line (La_Sortie.Communication.Nom);
Found := Nos_Chaines.Equal (La_Direction, La_Sortie.Direction);
Liste_Direction.Next (Iterateur_Direction);
end loop;
end if;
if (Found and (La_Sortie.Communication /= null)) then
Text_Io.Put ("j'ai trouve la direction, sa com est : ");
Nos_Chaines.Print_Line (La_Sortie.Communication.Nom);
Nos_Chaines.Copy (Variable_Communication.Nom,
La_Sortie.Communication.Nom);
Structure_Des_Variables.Find (Variable_Communication, Trouve2);
if Trouve2 then
Text_Io.Put_Line ("avt consult sortie");
Consult_Sortie (Le_Lieu, La_Destination,
Variable_Communication, Le_Sens, Found);
else
Le_Sens := 0;
Nos_Chaines.Copy (La_Destination, "");
end if;
else
Le_Sens := 0;
Nos_Chaines.Copy (La_Destination, "");
end if;
Trouve := Found;
Text_Io.Put_Line ("je quitte direction_belong to lieu avec is Found a" &
Boolean'Image (Found));
Nos_Chaines.Print_Line (La_Destination);
Text_Io.Put_Line (":::::::::::::");
end Direction_Belong_To_Lieu;
end Consult_Structure;
nblk1=2b
nid=5
hdr6=54
[0x00] rec0=1d rec1=00 rec2=01 rec3=06a
[0x01] rec0=1a rec1=00 rec2=02 rec3=03a
[0x02] rec0=18 rec1=00 rec2=03 rec3=00c
[0x03] rec0=19 rec1=00 rec2=04 rec3=03c
[0x04] rec0=14 rec1=00 rec2=29 rec3=002
[0x05] rec0=11 rec1=00 rec2=06 rec3=00a
[0x06] rec0=19 rec1=00 rec2=07 rec3=034
[0x07] rec0=17 rec1=00 rec2=08 rec3=00a
[0x08] rec0=1b rec1=00 rec2=09 rec3=018
[0x09] rec0=14 rec1=00 rec2=0a rec3=05e
[0x0a] rec0=1b rec1=00 rec2=0b rec3=016
[0x0b] rec0=15 rec1=00 rec2=0c rec3=026
[0x0c] rec0=19 rec1=00 rec2=0d rec3=008
[0x0d] rec0=1b rec1=00 rec2=0e rec3=026
[0x0e] rec0=18 rec1=00 rec2=0f rec3=058
[0x0f] rec0=18 rec1=00 rec2=10 rec3=064
[0x10] rec0=16 rec1=00 rec2=11 rec3=036
[0x11] rec0=1c rec1=00 rec2=12 rec3=012
[0x12] rec0=18 rec1=00 rec2=13 rec3=03a
[0x13] rec0=16 rec1=00 rec2=14 rec3=086
[0x14] rec0=0f rec1=00 rec2=15 rec3=074
[0x15] rec0=16 rec1=00 rec2=16 rec3=042
[0x16] rec0=16 rec1=00 rec2=17 rec3=06e
[0x17] rec0=19 rec1=00 rec2=18 rec3=026
[0x18] rec0=11 rec1=00 rec2=19 rec3=06a
[0x19] rec0=11 rec1=00 rec2=1a rec3=008
[0x1a] rec0=18 rec1=00 rec2=1b rec3=01a
[0x1b] rec0=12 rec1=00 rec2=1c rec3=050
[0x1c] rec0=14 rec1=00 rec2=1d rec3=040
[0x1d] rec0=19 rec1=00 rec2=1e rec3=00e
[0x1e] rec0=0e rec1=00 rec2=1f rec3=044
[0x1f] rec0=19 rec1=00 rec2=20 rec3=034
[0x20] rec0=12 rec1=00 rec2=21 rec3=05c
[0x21] rec0=0f rec1=00 rec2=22 rec3=02c
[0x22] rec0=02 rec1=00 rec2=2b rec3=00e
[0x23] rec0=10 rec1=00 rec2=23 rec3=06c
[0x24] rec0=12 rec1=00 rec2=24 rec3=01e
[0x25] rec0=16 rec1=00 rec2=25 rec3=026
[0x26] rec0=02 rec1=00 rec2=2a rec3=06e
[0x27] rec0=16 rec1=00 rec2=26 rec3=072
[0x28] rec0=10 rec1=00 rec2=27 rec3=072
[0x29] rec0=1a rec1=00 rec2=28 rec3=001
[0x2a] rec0=53 rec1=df rec2=0b rec3=766
tail 0x2174d2f08865aa52e85ca 0x42a00088462060003
Free Block Chain:
0x5: 0000 00 00 03 fc 80 1c 72 69 61 62 6c 65 20 73 75 72 ┆ riable sur┆