|
|
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 Liste_D_Instructions, seg_04951e
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
with Unchecked_Deallocation, Text_Io, Bounded_String,
Set_Of_Links, Set_Of_Connections, Interprete,
Comps_Dictionary, Lexical, Erreur, Symbols, Displays;
use Bounded_String, Lexical;
package body Liste_D_Instructions is
procedure Free is new Unchecked_Deallocation (Cell, Object);
type Listiter is new Object;
function Last (L : in Object) return Object is
Place_In_L : Object;
Temp_Place_In_L : Object;
begin
if L = null then
return null;
else
Place_In_L := L;
while Place_In_L /= null loop
Temp_Place_In_L := Place_In_L;
Place_In_L := Place_In_L.Next;
end loop;
return Temp_Place_In_L;
end if;
end Last;
procedure Attache (List1 : in out Object; List2 : in Object) is
Endoflist1 : Object;
begin
if List1 = null then
List1 := List2;
return;
else
Endoflist1 := Last (List1);
Endoflist1.Next := List2;
end if;
end Attache;
procedure Attache (L : in out Object; Element : in Itemtype) is
Newend : Object;
begin
Newend := new Cell'(Info => Element, Next => null);
Attache (L, Newend);
end Attache;
function Creation return Object is
begin
return null;
end Creation;
function Creation_Iterateur (L : in Object) return Listiter is
begin
return Listiter (L);
end Creation_Iterateur;
procedure Avancer (I : in out Listiter) is
begin
if I /= null then
I := Listiter (I.Next);
end if;
end Avancer;
function Est_Vide (L : in Object) return Boolean is
begin
return (L = null);
end Est_Vide;
function Encore (L : in Listiter) return Boolean is
begin
return L /= null;
end Encore;
function Valeur (
I : in Listiter) return Itemtype is
L : Object;
begin
L := Object (I);
return L.Info;
end Valeur;
function Creer_Si (E : in Abstract_Tree.Object;
L_Alors : in Object;
L_Sinon : in Object) return Object is
L : Object;
Elt : Itemtype (Si_Alors_Sinon);
begin
L := Creation;
Elt.Genre := Si_Alors_Sinon;
Elt.Exp_Cond := E;
Elt.Alors := L_Alors;
Elt.Sinon := L_Sinon;
Attache (L, Elt);
return L;
end Creer_Si;
function Creer_Pour (E : in Integer; L_Faire : in Object) return Object is
L : Object;
Elt : Itemtype (Pour_Faire);
begin
Elt.Genre := Pour_Faire;
Elt.Entier := E;
Elt.Faire := L_Faire;
Attache (L, Elt);
return L;
end Creer_Pour;
function Creer_Affec (N_Var, N_Ext : in Bounded_String.Variable_String;
E : in Abstract_Tree.Object) return Object is
L : Object;
Elt : Itemtype (Affectation);
begin
Elt.Genre := Affectation;
Elt.Nom_Var := N_Var;
Elt.Nom_Extension := N_Ext;
Elt.Exp_Generale := E;
Attache (L, Elt);
return L;
end Creer_Affec;
function Creer_Lie_Con
(V1, V2 : in Bounded_String.Variable_String) return Object is
L : Object;
Elt : Itemtype (Lie_Connexion);
begin
Elt.Genre := Lie_Connexion;
Elt.Var1_Lie := V1;
Elt.Var2_Lie := V2;
Attache (L, Elt);
return L;
end Creer_Lie_Con;
function Creer_Delie_Con
(V1, V2 : in Bounded_String.Variable_String) return Object is
L : Object;
Elt : Itemtype (Delie_Connexion);
begin
Elt.Genre := Delie_Connexion;
Elt.Var1_Lie := V1;
Elt.Var2_Lie := V2;
Attache (L, Elt);
return L;
end Creer_Delie_Con;
function Creer_Lie_Lien
(V1, V2 : in Bounded_String.Variable_String) return Object is
L : Object;
Elt : Itemtype (Lie_Lien);
begin
Elt.Genre := Lie_Lien;
Elt.Var1_Lie := V1;
Elt.Var2_Lie := V2;
Attache (L, Elt);
return L;
end Creer_Lie_Lien;
function Creer_Delie_Lien
(V1, V2 : in Bounded_String.Variable_String) return Object is
L : Object;
Elt : Itemtype (Delie_Lien);
begin
Elt.Genre := Delie_Lien;
Elt.Var1_Lie := V1;
Elt.Var2_Lie := V2;
Attache (L, Elt);
return L;
end Creer_Delie_Lien;
function Creer_Echanger_Lien
(V1, V2, V3 : in Bounded_String.Variable_String)
return Object is
L : Object;
Elt : Itemtype (Echanger_Lien);
begin
Elt.Genre := Echanger_Lien;
Elt.Var1_Ech := V1;
Elt.Var2_Ech := V2;
Elt.Var3_Ech := V3;
Attache (L, Elt);
return L;
end Creer_Echanger_Lien;
function Creer_Liste
(V1 : in Bounded_String.Variable_String; V2 : Lexical.Token)
return Object is
L : Object;
Elt : Itemtype (Liste_Lien);
begin
Elt.Genre := Liste_Lien;
Elt.Var_Liste := V1;
Elt.Etat := V2;
Attache (L, Elt);
return L;
end Creer_Liste;
function Creer_Afficher (P : in Displays.Object) return Object is
L : Object;
Elt : Itemtype (Afficher);
begin
Elt.Genre := Afficher;
Elt.Param1 := P;
Attache (L, Elt);
return L;
end Creer_Afficher;
function Creer_Fin return Object is
L : Object;
Elt : Itemtype (Fin);
begin
Elt.Genre := Fin;
Attache (L, Elt);
return L;
end Creer_Fin;
function Creer_Vide return Object is
L : Object;
Elt : Itemtype (Vide);
begin
Elt.Genre := Vide;
Attache (L, Elt);
return L;
end Creer_Vide;
procedure Afficher_Esp (Nb : Integer) is
begin
for I in 1 .. Nb loop
Text_Io.Put (" ");
end loop;
end Afficher_Esp;
procedure Afficher_Struct (Nb : Integer; O : in Object) is
I : Listiter;
E : Itemtype;
begin
I := Creation_Iterateur (O);
while Encore (I) loop
E := Valeur (I);
case E.Genre is
when Si_Alors_Sinon =>
Afficher_Esp (Nb);
Text_Io.Put_Line ("SI");
Abstract_Tree.Dump_Struct (Nb + 2, E.Exp_Cond);
Afficher_Esp (Nb);
Text_Io.Put_Line ("ALORS");
Afficher_Struct (Nb + 2, E.Alors);
Afficher_Esp (Nb);
Text_Io.Put_Line ("SINON");
Afficher_Struct (Nb + 2, E.Sinon);
Afficher_Esp (Nb);
Text_Io.Put_Line ("FIN_SI");
when Pour_Faire =>
Afficher_Esp (Nb);
Text_Io.Put_Line ("POUR " & Integer'Image (E.Entier) &
" ENTREE FAIRE ");
Afficher_Struct (Nb + 2, E.Faire);
Afficher_Esp (Nb);
Text_Io.Put_Line ("FIN_POUR");
when Affectation =>
Afficher_Esp (Nb);
Text_Io.Put (Image (E.Nom_Var));
if Bounded_String.Length (E.Nom_Extension) > 0 then
Text_Io.Put ("." & Image (E.Nom_Extension));
end if;
Text_Io.Put_Line (" = ");
Abstract_Tree.Dump_Struct (Nb + 2, E.Exp_Generale);
when Lie_Connexion =>
Afficher_Esp (Nb);
Text_Io.Put_Line ("LIE_CONNEXION ( " & Image (E.Var1_Lie) &
", " & Image (E.Var2_Lie) & " )");
when Delie_Connexion =>
Afficher_Esp (Nb);
Text_Io.Put_Line ("DELIE_CONNEXION ( " &
Image (E.Var1_Lie) & ", " &
Image (E.Var2_Lie) & " )");
when Lie_Lien =>
Afficher_Esp (Nb);
Text_Io.Put_Line ("LIE_LIEN ( " & Image (E.Var1_Lie) &
", " & Image (E.Var2_Lie) & " )");
when Delie_Lien =>
Afficher_Esp (Nb);
Text_Io.Put_Line ("DELIE_LIEN ( " & Image (E.Var1_Lie) &
", " & Image (E.Var2_Lie) & " )");
when Liste_Lien =>
Afficher_Esp (Nb);
Text_Io.Put_Line ("LISTE_LIEN ( " &
Image (E.Var_Liste) & ", " &
Lexical.Token'Image (E.Etat) & " )");
when Echanger_Lien =>
Afficher_Esp (Nb);
Text_Io.Put_Line ("ECHANGER_LIEN ( " & Image (E.Var1_Ech) &
", " & Image (E.Var2_Ech) & ", " &
Image (E.Var3_Ech) & " )");
when Afficher =>
Afficher_Esp (Nb);
Text_Io.Put_Line (" -- Afficher -- ");
when Fin =>
Afficher_Esp (Nb);
Text_Io.Put_Line ("FIN");
when Vide =>
Afficher_Esp (Nb);
Text_Io.Put_Line ("-- Vide");
end case;
Avancer (I);
end loop;
end Afficher_Struct;
procedure Afficher (O : in Object) is
begin
Afficher_Struct (0, O);
end Afficher;
procedure Executer_Si (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : in out Symbols.Object;
Connect : in out Set_Of_Connections.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Jeu_Termine : in out Boolean;
Mode_Trace : Boolean;
Instruct_Executee : in out Boolean);
procedure Executer_Pour (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : in out Symbols.Object;
Connect : in out Set_Of_Connections.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Jeu_Termine : in out Boolean;
Mode_Trace : Boolean;
Instruct_Executee : in out Boolean);
procedure Executer_Affec (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : in out Symbols.Object;
Connect : in out Set_Of_Connections.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean);
procedure Executer_Lie_Con (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Connect : in out Set_Of_Connections.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean);
procedure Executer_Delie_Con (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Connect : in out Set_Of_Connections.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean);
procedure Executer_Lie_Lien (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean);
procedure Executer_Delie_Lien (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean);
procedure Executer_Liste (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean);
procedure Executer_Echanger (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean);
procedure Executer_Afficher (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean);
procedure Executer_Fin (E : Itemtype;
Mode_Trace : Boolean;
Jeu_Termine : in out Boolean);
procedure Executer_Vide (E : Itemtype; Mode_Trace : Boolean);
procedure Executer (L : in Object;
Models_Table : Models.Object;
Symbols_Table : in out Symbols.Object;
Connect : in out Set_Of_Connections.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Jeu_Termine : in out Boolean;
Mode_Trace : Boolean;
Instruct_Executee : in out Boolean) is
E : Itemtype;
I : Listiter;
begin
I := Creation_Iterateur (L);
while Encore (I) and not Jeu_Termine loop
E := Valeur (I);
case E.Genre is
when Si_Alors_Sinon =>
Executer_Si (E, Models_Table, Symbols_Table,
Connect, Links, Comp_Dict, Jeu_Termine,
Mode_Trace, Instruct_Executee);
when Pour_Faire =>
Executer_Pour (E, Models_Table, Symbols_Table,
Connect, Links, Comp_Dict, Jeu_Termine,
Mode_Trace, Instruct_Executee);
when Affectation =>
Executer_Affec (E, Models_Table, Symbols_Table,
Connect, Links, Comp_Dict, Mode_Trace);
Instruct_Executee := True;
when Lie_Connexion =>
Executer_Lie_Con (E, Models_Table, Symbols_Table,
Connect, Comp_Dict, Mode_Trace);
Instruct_Executee := True;
when Delie_Connexion =>
Executer_Delie_Con (E, Models_Table, Symbols_Table,
Connect, Comp_Dict, Mode_Trace);
Instruct_Executee := True;
when Lie_Lien =>
Executer_Lie_Lien (E, Models_Table, Symbols_Table,
Links, Comp_Dict, Mode_Trace);
Instruct_Executee := True;
when Delie_Lien =>
Executer_Delie_Lien (E, Models_Table, Symbols_Table,
Links, Comp_Dict, Mode_Trace);
Instruct_Executee := True;
when Liste_Lien =>
Executer_Liste (E, Models_Table, Symbols_Table,
Links, Comp_Dict, Mode_Trace);
Instruct_Executee := True;
when Echanger_Lien =>
Executer_Echanger (E, Models_Table, Symbols_Table,
Links, Comp_Dict, Mode_Trace);
Instruct_Executee := True;
when Afficher =>
Executer_Afficher (E, Models_Table, Symbols_Table,
Comp_Dict, Mode_Trace);
Instruct_Executee := True;
when Fin =>
Executer_Fin (E, Mode_Trace, Jeu_Termine);
Instruct_Executee := True;
when Vide =>
Executer_Vide (E, Mode_Trace);
end case;
Avancer (I);
end loop;
end Executer;
procedure Find_Real_Param (A : in out Variable_String;
Comp_Dict : Comps_Dictionary.Object;
Symbols_Table : Symbols.Object) is
begin
if Symbols.Has_Symbol (Symbols_Table, Image (A)) or
not Comps_Dictionary.Exist (Image (A), Comp_Dict) then
if Image (A) = "COMP" then
Bounded_String.Copy (A,
Interprete.First_Comp_Value (Comp_Dict));
end if;
if Symbols.Has_Symbol (Symbols_Table, Image (A)) or
not Comps_Dictionary.Exist (Image (A), Comp_Dict) then
if Symbols.Is_Pointer (Symbols_Table, Image (A)) then
Bounded_String.Copy (A, Symbols.Get_Pointer_Reference
(Symbols_Table, Image (A)));
end if;
end if;
end if;
end Find_Real_Param;
procedure Executer_Si (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : in out Symbols.Object;
Connect : in out Set_Of_Connections.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Jeu_Termine : in out Boolean;
Mode_Trace : Boolean;
Instruct_Executee : in out Boolean) is
Cond : Boolean;
begin
if Mode_Trace then
Text_Io.Put_Line (">> Execution SI <<");
Text_Io.Put_Line (">> Condition:");
Abstract_Tree.Dump (E.Exp_Cond);
end if;
Cond := Abstract_Tree.Evaluate_Node
(E.Exp_Cond, Models_Table, Symbols_Table,
Connect, Links, Comp_Dict);
if (Cond) then
if Mode_Trace then
Text_Io.Put_Line (">> Execution ALORS <<");
end if;
Executer (E.Alors, Models_Table, Symbols_Table, Connect, Links,
Comp_Dict, Jeu_Termine, Mode_Trace, Instruct_Executee);
else
if Mode_Trace then
Text_Io.Put_Line (">> Execution SINON <<");
end if;
Executer (E.Sinon, Models_Table, Symbols_Table, Connect, Links,
Comp_Dict, Jeu_Termine, Mode_Trace, Instruct_Executee);
end if;
if Mode_Trace then
Text_Io.Put_Line (">> FIN SI <<");
end if;
end Executer_Si;
procedure Executer_Pour (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : in out Symbols.Object;
Connect : in out Set_Of_Connections.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Jeu_Termine : in out Boolean;
Mode_Trace : Boolean;
Instruct_Executee : in out Boolean) is
begin
if (Interprete.Total_Entries mod E.Entier = 0) then
if Mode_Trace then
Text_Io.Put_Line (">> Execution POUR (" &
Integer'Image (E.Entier) & ")");
end if;
Executer (E.Faire, Models_Table, Symbols_Table, Connect, Links,
Comp_Dict, Jeu_Termine, Mode_Trace, Instruct_Executee);
if Mode_Trace then
Text_Io.Put_Line (">> FIN POUR <<");
end if;
end if;
end Executer_Pour;
procedure Executer_Affec (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : in out Symbols.Object;
Connect : in out Set_Of_Connections.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean) is
The_Integer : Integer;
The_Booleen : Boolean;
begin
if Mode_Trace then
Text_Io.Put_Line (">> Execution AFFECTATION <<");
Text_Io.Put (Image (E.Nom_Var));
if (Bounded_String.Length (E.Nom_Extension) > 0) then
Text_Io.Put ("." & Image (E.Nom_Extension));
end if;
Text_Io.Put_Line (" := ");
Abstract_Tree.Dump (E.Exp_Generale);
end if;
if Bounded_String.Length (E.Nom_Extension) = 0 then
if Symbols.Is_Pointer (Symbols_Table, Image (E.Nom_Var)) then
Symbols.Put_Pointer_Reference
(Symbols_Table, Image (E.Nom_Var),
Abstract_Tree.Evaluate_Node
(E.Exp_Generale, Models_Table,
Symbols_Table, Connect, Links, Comp_Dict));
else
Erreur.Execution
("Manque l'extension pour l'acces a la variable !!!");
end if;
else
if Symbols.Get_Symbol_Type
(Symbols_Table, Models_Table,
Image (E.Nom_Var), Image (E.Nom_Extension)) = "ENTIER" or
Symbols.Get_Symbol_Type
(Symbols_Table, Models_Table,
Image (E.Nom_Var), Image (E.Nom_Extension)) = "ENUMERE" then
The_Integer := Abstract_Tree.Evaluate_Node
(E.Exp_Generale, Models_Table,
Symbols_Table, Connect, Links, Comp_Dict);
Symbols.Put_Symbol_Value
(Symbols_Table, Models_Table, Image (E.Nom_Var),
Image (E.Nom_Extension), The_Integer);
else
if Symbols.Get_Symbol_Type
(Symbols_Table, Models_Table,
Image (E.Nom_Var), Image (E.Nom_Extension)) =
"BOOLEEN" then
The_Booleen := Abstract_Tree.Evaluate_Node
(E.Exp_Generale, Models_Table,
Symbols_Table, Connect,
Links, Comp_Dict);
Symbols.Put_Symbol_Value
(Symbols_Table, Models_Table, Image (E.Nom_Var),
Image (E.Nom_Extension), The_Booleen);
else
Erreur.Execution ("Affectation non valide !!!");
end if;
end if;
end if;
end Executer_Affec;
procedure Executer_Lie_Con (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Connect : in out Set_Of_Connections.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean) is
P1, P2 : Bounded_String.Variable_String (32);
begin
if Mode_Trace then
Text_Io.Put_Line (">> Execution LIE_CONNEXION <<");
Text_Io.Put (">> Parametres: " & Image (E.Var1_Lie) & " , ");
Text_Io.Put_Line (Image (E.Var2_Lie));
end if;
P1 := E.Var1_Lie;
P2 := E.Var2_Lie;
Find_Real_Param (P1, Comp_Dict, Symbols_Table);
Find_Real_Param (P2, Comp_Dict, Symbols_Table);
Set_Of_Connections.Modify_State (Image (P1), Image (P2),
Set_Of_Connections.Linked, Connect);
end Executer_Lie_Con;
procedure Executer_Delie_Con (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Connect : in out Set_Of_Connections.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean) is
P1, P2 : Bounded_String.Variable_String (32);
begin
if Mode_Trace then
Text_Io.Put_Line (">> Execution DELIE_CONNEXION <<");
Text_Io.Put (">> Parametres: " & Image (E.Var1_Lie) & " , ");
Text_Io.Put_Line (Image (E.Var2_Lie));
end if;
P1 := E.Var1_Lie;
P2 := E.Var2_Lie;
Find_Real_Param (P1, Comp_Dict, Symbols_Table);
Find_Real_Param (P2, Comp_Dict, Symbols_Table);
Set_Of_Connections.Modify_State (Image (P1), Image (P2),
Set_Of_Connections.Unlinked, Connect);
end Executer_Delie_Con;
procedure Executer_Lie_Lien (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean) is
P1, P2 : Bounded_String.Variable_String (32);
begin
if Mode_Trace then
Text_Io.Put_Line (">> Execution LIE_LIEN <<");
Text_Io.Put (">> Parametres: " & Image (E.Var1_Lie) & " , ");
Text_Io.Put_Line (Image (E.Var2_Lie));
end if;
P1 := E.Var1_Lie;
P2 := E.Var2_Lie;
Find_Real_Param (P1, Comp_Dict, Symbols_Table);
Find_Real_Param (P2, Comp_Dict, Symbols_Table);
Set_Of_Links.Modify_State (Image (P1), Image (P2),
Set_Of_Links.Linked, Links);
end Executer_Lie_Lien;
procedure Executer_Delie_Lien (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean) is
P1, P2 : Bounded_String.Variable_String (32);
begin
if Mode_Trace then
Text_Io.Put_Line (">> Execution DELIE_LIEN <<");
Text_Io.Put (">> Parametres: " & Image (E.Var1_Lie) & " , ");
Text_Io.Put_Line (Image (E.Var2_Lie));
end if;
P1 := E.Var1_Lie;
P2 := E.Var2_Lie;
Find_Real_Param (P1, Comp_Dict, Symbols_Table);
Find_Real_Param (P2, Comp_Dict, Symbols_Table);
Set_Of_Links.Modify_State (Image (P1), Image (P2),
Set_Of_Links.Unlinked, Links);
end Executer_Delie_Lien;
procedure Executer_Liste (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean) is
P : Bounded_String.Variable_String (32);
begin
if Mode_Trace then
Text_Io.Put_Line (">> Execution LISTE_LIEN <<");
Text_Io.Put (">> Parametres: " & Image (E.Var_Liste) &
", " & Lexical.Token'Image (E.Etat));
end if;
P := E.Var_Liste;
Find_Real_Param (P, Comp_Dict, Symbols_Table);
if E.Etat = Lie then
Set_Of_Links.List (Image (P), Set_Of_Links.Linked, Links);
else
Set_Of_Links.List (Image (P), Set_Of_Links.Unlinked, Links);
end if;
end Executer_Liste;
procedure Executer_Echanger (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Links : in out Set_Of_Links.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean) is
P1, P2, P3 : Bounded_String.Variable_String (32);
begin
if Mode_Trace then
Text_Io.Put_Line (">> Execution ECHANGER_LIEN <<");
Text_Io.Put (">> Parametres: " & Image (E.Var1_Ech) & ", " &
Image (E.Var2_Ech) & ", " & Image (E.Var3_Ech));
end if;
P1 := E.Var1_Ech;
P2 := E.Var2_Ech;
P3 := E.Var3_Ech;
Find_Real_Param (P1, Comp_Dict, Symbols_Table);
Find_Real_Param (P2, Comp_Dict, Symbols_Table);
Find_Real_Param (P3, Comp_Dict, Symbols_Table);
Set_Of_Links.Exchange (Image (P1), Image (P2), Image (P3), Links);
end Executer_Echanger;
procedure Executer_Afficher (E : Itemtype;
Models_Table : Models.Object;
Symbols_Table : Symbols.Object;
Comp_Dict : Comps_Dictionary.Object;
Mode_Trace : Boolean) is
begin
if Mode_Trace then
Text_Io.Put_Line (">> Execution AFFICHER <<");
end if;
Displays.Write (E.Param1, Symbols_Table, Models_Table, Comp_Dict);
end Executer_Afficher;
procedure Executer_Fin (E : Itemtype;
Mode_Trace : Boolean;
Jeu_Termine : in out Boolean) is
begin
if Mode_Trace then
Text_Io.Put_Line (">> Execution FIN <<");
end if;
Jeu_Termine := True;
end Executer_Fin;
procedure Executer_Vide (E : Itemtype; Mode_Trace : Boolean) is
begin
if Mode_Trace then
Text_Io.Put_Line (">> Execution VIDE <<");
end if;
end Executer_Vide;
procedure Detruire_Element (L : in out Object) is
begin
case L.Info.Genre is
when Si_Alors_Sinon =>
Abstract_Tree.Destroy (L.Info.Exp_Cond);
Detruire (L.Info.Alors);
Detruire (L.Info.Sinon);
Free (L);
when Pour_Faire =>
Detruire (L.Info.Faire);
Free (L);
when Afficher =>
Displays.Dispose (L.Info.Param1);
Free (L);
when Affectation =>
Abstract_Tree.Destroy (L.Info.Exp_Generale);
Free (L);
when others =>
Free (L);
end case;
end Detruire_Element;
procedure Detruire (L : in out Object) is
L1, L2 : Object;
begin
L1 := L;
while not Est_Vide (L1) loop
L2 := L1.Next;
Detruire_Element (L1);
L1 := L2;
end loop;
end Detruire;
end Liste_D_Instructions;
nblk1=2b
nid=a
hdr6=4c
[0x00] rec0=25 rec1=00 rec2=01 rec3=008
[0x01] rec0=01 rec1=00 rec2=0c rec3=010
[0x02] rec0=2b rec1=00 rec2=0f rec3=000
[0x03] rec0=23 rec1=00 rec2=17 rec3=048
[0x04] rec0=1f rec1=00 rec2=0d rec3=034
[0x05] rec0=22 rec1=00 rec2=23 rec3=048
[0x06] rec0=26 rec1=00 rec2=21 rec3=024
[0x07] rec0=00 rec1=00 rec2=22 rec3=00c
[0x08] rec0=25 rec1=00 rec2=24 rec3=00a
[0x09] rec0=05 rec1=00 rec2=28 rec3=030
[0x0a] rec0=16 rec1=00 rec2=03 rec3=028
[0x0b] rec0=16 rec1=00 rec2=1e rec3=006
[0x0c] rec0=1f rec1=00 rec2=20 rec3=026
[0x0d] rec0=11 rec1=00 rec2=04 rec3=048
[0x0e] rec0=13 rec1=00 rec2=1a rec3=054
[0x0f] rec0=11 rec1=00 rec2=1c rec3=082
[0x10] rec0=14 rec1=00 rec2=18 rec3=014
[0x11] rec0=1b rec1=00 rec2=2a rec3=02e
[0x12] rec0=13 rec1=00 rec2=05 rec3=038
[0x13] rec0=14 rec1=00 rec2=14 rec3=044
[0x14] rec0=18 rec1=00 rec2=0e rec3=014
[0x15] rec0=14 rec1=00 rec2=15 rec3=010
[0x16] rec0=04 rec1=00 rec2=1f rec3=05e
[0x17] rec0=18 rec1=00 rec2=27 rec3=00e
[0x18] rec0=15 rec1=00 rec2=19 rec3=06c
[0x19] rec0=17 rec1=00 rec2=08 rec3=022
[0x1a] rec0=16 rec1=00 rec2=06 rec3=050
[0x1b] rec0=13 rec1=00 rec2=02 rec3=00e
[0x1c] rec0=15 rec1=00 rec2=07 rec3=01c
[0x1d] rec0=18 rec1=00 rec2=26 rec3=018
[0x1e] rec0=17 rec1=00 rec2=1d rec3=06a
[0x1f] rec0=18 rec1=00 rec2=12 rec3=036
[0x20] rec0=18 rec1=00 rec2=1b rec3=040
[0x21] rec0=19 rec1=00 rec2=0b rec3=016
[0x22] rec0=10 rec1=00 rec2=10 rec3=02c
[0x23] rec0=1b rec1=00 rec2=09 rec3=000
[0x24] rec0=20 rec1=00 rec2=29 rec3=006
[0x25] rec0=04 rec1=00 rec2=13 rec3=000
[0x26] rec0=1b rec1=00 rec2=09 rec3=000
[0x27] rec0=01 rec1=00 rec2=29 rec3=016
[0x28] rec0=21 rec1=00 rec2=13 rec3=000
[0x29] rec0=01 rec1=00 rec2=26 rec3=000
[0x2a] rec0=0d rec1=f4 rec2=ce rec3=46b
tail 0x21546b276865e431278dd 0x42a00088462060003
Free Block Chain:
0xa: 0000 00 11 02 d9 80 33 54 65 78 74 5f 49 6f 2e 50 75 ┆ 3Text_Io.Pu┆
0x11: 0000 00 25 00 0c 80 09 20 20 20 20 20 20 20 20 20 09 ┆ % ┆
0x25: 0000 00 16 00 28 00 21 20 20 20 20 20 20 20 20 20 20 ┆ ( ! ┆
0x16: 0000 00 2b 00 04 80 01 20 01 20 20 20 20 20 20 20 20 ┆ + ┆
0x2b: 0000 00 00 00 2a 80 27 20 20 20 20 20 20 20 20 20 20 ┆ * ' ┆