DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦0796e69dc⟧ Ada Source

    Length: 45056 (0xb000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Liste_D_Instructions, seg_0492fd

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



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) 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;

E3 Meta Data

    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 0x2174d9afc865b705d7256 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  ┆   * '          ┆