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

⟦507a0ba88⟧ Ada Source

    Length: 38912 (0x9800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Liste_D_Instructions, seg_046a82

Derivation

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

E3 Source Code



with Unchecked_Deallocation, Text_Io, Simulateur_Itr, Bounded_String,
     Set_Of_Links, Set_Of_Connections, Lexical, Erreur;
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 (P1 : in Integer) return Object is
        L : Object;
        Elt : Itemtype (Afficher);
    begin
        Elt.Genre := Afficher;
        Elt.Param1 := P1;

        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 (Elt : in Itemtype) is
    begin
        case Elt.Genre is
            when Affectation =>
                Text_Io.Put (Image (Elt.Nom_Var));
                if (Bounded_String.Length (Elt.Nom_Extension) > 0) then
                    Text_Io.Put ("." & Image (Elt.Nom_Extension));
                end if;
                Text_Io.Put_Line (" = ");
                Abstract_Tree.Dump (Elt.Exp_Generale);
            when Lie_Connexion =>
                Text_Io.Put (Image (Elt.Var1_Lie) & " , ");

                Text_Io.Put_Line (Image (Elt.Var2_Lie));

            when Delie_Connexion =>
                Text_Io.Put (Image (Elt.Var1_Lie) & " , ");

                Text_Io.Put_Line (Image (Elt.Var2_Lie));
            when Lie_Lien =>
                Text_Io.Put (Image (Elt.Var1_Lie) & " , ");

                Text_Io.Put_Line (Image (Elt.Var2_Lie));
            when Delie_Lien =>
                Text_Io.Put (Image (Elt.Var1_Lie) & " , ");

                Text_Io.Put_Line (Image (Elt.Var2_Lie));
            when Liste_Lien =>
                Text_Io.Put (Image (Elt.Var_Liste) & " , ");
                Text_Io.Put_Line (Lexical.Token'Image (Elt.Etat));
            when Echanger_Lien =>
                Text_Io.Put (Image (Elt.Var1_Ech) & " , ");
                Text_Io.Put (Image (Elt.Var2_Ech) & " , ");

                Text_Io.Put_Line (Image (Elt.Var3_Ech));
            when Afficher =>
                Text_Io.Put_Line (Integer'Image (Elt.Param1));
            when Fin =>
                null;
            when Vide =>
                null;
            when others =>
                null;
        end case;

    end Afficher;

    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 ("-- fonction 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 : Symbols.Object;
                           Connect : in out Set_Of_Connections.Object;
                           Links : in out Set_Of_Links.Object);

    procedure Executer_Pour (E : Itemtype;
                             Models_Table : Models.Object;
                             Symbols_Table : Symbols.Object;
                             Connect : in out Set_Of_Connections.Object;
                             Links : in out Set_Of_Links.Object);

    procedure Executer_Affec (E : Itemtype;
                              Models_Table : Models.Object;
                              Symbols_Table : Symbols.Object;
                              Connect : in out Set_Of_Connections.Object;
                              Links : in out Set_Of_Links.Object);

    procedure Executer_Lie_Con (E : Itemtype;
                                Models_Table : Models.Object;
                                Symbols_Table : Symbols.Object;
                                Connect : in out Set_Of_Connections.Object);

    procedure Executer_Delie_Con (E : Itemtype;
                                  Models_Table : Models.Object;
                                  Symbols_Table : Symbols.Object;
                                  Connect : in out Set_Of_Connections.Object);

    procedure Executer_Lie_Lien (E : Itemtype;
                                 Models_Table : Models.Object;
                                 Symbols_Table : Symbols.Object;
                                 Links : in out Set_Of_Links.Object);

    procedure Executer_Delie_Lien (E : Itemtype;
                                   Models_Table : Models.Object;
                                   Symbols_Table : Symbols.Object;
                                   Links : in out Set_Of_Links.Object);

    procedure Executer_Liste (E : Itemtype;
                              Models_Table : Models.Object;
                              Symbols_Table : Symbols.Object;
                              Links : in out Set_Of_Links.Object);

    procedure Executer_Echanger (E : Itemtype;
                                 Models_Table : Models.Object;
                                 Symbols_Table : Symbols.Object;
                                 Links : in out Set_Of_Links.Object);

    procedure Executer_Afficher (E : Itemtype;
                                 Models_Table : Models.Object;
                                 Symbols_Table : Symbols.Object);

    procedure Executer_Fin (E : Itemtype);


    procedure Executer_Vide (E : Itemtype);




    procedure Executer (L : in Object;
                        Models_Table : Models.Object;
                        Symbols_Table : Symbols.Object;
                        Connect : in out Set_Of_Connections.Object;
                        Links : in out Set_Of_Links.Object) 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);
                when Pour_Faire =>
                    Executer_Pour (E, Models_Table, Symbols_Table,
                                   Connect, Links);
                when Affectation =>
                    Executer_Affec (E, Models_Table, Symbols_Table,
                                    Connect, Links);
                when Lie_Connexion =>
                    Executer_Lie_Con (E, Models_Table, Symbols_Table, Connect);

                when Delie_Connexion =>
                    Executer_Delie_Con (E, Models_Table,
                                        Symbols_Table, Connect);

                when Lie_Lien =>
                    Executer_Lie_Lien (E, Models_Table, Symbols_Table, Links);

                when Delie_Lien =>
                    Executer_Delie_Lien (E, Models_Table, Symbols_Table, Links);
                when Liste_Lien =>
                    Executer_Liste (E, Models_Table, Symbols_Table, Links);
                when Echanger_Lien =>
                    Executer_Echanger (E, Models_Table, Symbols_Table, Links);
                when Afficher =>
                    Executer_Afficher (E, Models_Table, Symbols_Table);
                when Fin =>
                    Executer_Fin (E);
                when Vide =>
                    Executer_Vide (E);
            end case;

            Avancer (I);
        end loop;
    end Executer;



    procedure Executer_Si (E : Itemtype;
                           Models_Table : Models.Object;
                           Symbols_Table : Symbols.Object;
                           Connect : in out Set_Of_Connections.Object;
                           Links : in out Set_Of_Links.Object) is
        Cond : Boolean;
    begin
        Text_Io.Put_Line (" execution de si-alors-sinon ");
        Cond := Abstract_Tree.Evaluate_Node
                   (E.Exp_Cond, Models_Table, Symbols_Table, Connect, Links);

        Abstract_Tree.Dump (E.Exp_Cond);
        if (Cond) then
            Text_Io.Put_Line (" verifiee execution de alors ");
            Executer (E.Alors, Models_Table, Symbols_Table, Connect, Links);
        else
            Text_Io.Put_Line (" non verifiee execution de sinon ");
            Executer (E.Sinon, Models_Table, Symbols_Table, Connect, Links);
        end if;
        Text_Io.Put_Line (" fin de si-alors-sinon ");
    end Executer_Si;

    procedure Executer_Pour (E : Itemtype;
                             Models_Table : Models.Object;
                             Symbols_Table : Symbols.Object;
                             Connect : in out Set_Of_Connections.Object;
                             Links : in out Set_Of_Links.Object) is
    begin
        Text_Io.Put_Line (" execution de pour-faire =>");  
        if (Simulateur_Itr.Total_Entries mod E.Entier = 0) then
            Text_Io.Put_Line (" condition verifiee ");
            Executer (E.Faire, Models_Table, Symbols_Table, Connect, Links);
        end if;  
        Text_Io.Put_Line (" fin de pour-faire ");
    end Executer_Pour;

    procedure Executer_Affec (E : Itemtype;
                              Models_Table : Models.Object;
                              Symbols_Table : Symbols.Object;
                              Connect : in out Set_Of_Connections.Object;
                              Links : in out Set_Of_Links.Object) is
        The_Integer : Integer;
        The_Booleen : Boolean;
    begin

        Text_Io.Put_Line (" execution affectation ");
        Afficher (E);

        if Bounded_String.Length (E.Nom_Extension) = 0 then
            if Symbols.Is_Pointer (Symbols_Table, Image (E.Nom_Var)) then
                null;
                -- A implementer
            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);
                -- symbols.put_symbol_value(Symbols_Table, Models_Table,Image(e.Nom_Var),Image(e.nom_extension));
            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);
                    -- symbols.put_symbol_value(Symbols_Table, Models_Table,Image(e.Nom_Var),Image(e.nom_extension))
                else
                    Erreur.Execution ("Affectation non valide !!!");
                end if;
            end if;
        end if;
        Text_Io.Put_Line (" fin de affectation ");
    end Executer_Affec;

    procedure Executer_Lie_Con (E : Itemtype;
                                Models_Table : Models.Object;
                                Symbols_Table : Symbols.Object;
                                Connect : in out Set_Of_Connections.Object) is  
    begin
        Text_Io.Put_Line (" execution lie_connexion ");
        Afficher (E);  
        if Image (E.Var1_Lie) = "COMP" then
            Set_Of_Connections.Modify_State
               (Simulateur_Itr.First_Comp_Value, Image (E.Var2_Lie),
                Set_Of_Connections.Linked, Connect);
        else
            if Image (E.Var2_Lie) = "COMP" then
                Set_Of_Connections.Modify_State
                   (Image (E.Var1_Lie), Simulateur_Itr.First_Comp_Value,
                    Set_Of_Connections.Linked, Connect);
            else

                Set_Of_Connections.Modify_State
                   (Image (E.Var1_Lie), Image (E.Var2_Lie),
                    Set_Of_Connections.Linked, Connect);
            end if;
        end if;
        Text_Io.Put_Line (" fin de lie_connexion ");
    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) is
    begin
        Text_Io.Put_Line (" execution delie_connexion ");
        Afficher (E);
        if Image (E.Var1_Lie) = "COMP" then
            Set_Of_Connections.Modify_State
               (Simulateur_Itr.First_Comp_Value, Image (E.Var2_Lie),
                Set_Of_Connections.Unlinked, Connect);
        else
            if Image (E.Var2_Lie) = "COMP" then
                Set_Of_Connections.Modify_State
                   (Image (E.Var1_Lie), Simulateur_Itr.First_Comp_Value,
                    Set_Of_Connections.Unlinked, Connect);
            else

                Set_Of_Connections.Modify_State
                   (Image (E.Var1_Lie), Image (E.Var2_Lie),
                    Set_Of_Connections.Unlinked, Connect);
            end if;
        end if;
        Text_Io.Put_Line (" fin de delie_connexion ");
    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) is
    begin
        Text_Io.Put_Line (" execution lie_lien ");
        Afficher (E);  
        if Image (E.Var1_Lie) = "COMP" then
            Set_Of_Links.Modify_State
               (Simulateur_Itr.First_Comp_Value,
                Image (E.Var2_Lie), Set_Of_Links.Linked, Links);
        else
            if Image (E.Var2_Lie) = "COMP" then
                Set_Of_Links.Modify_State (Image (E.Var1_Lie),
                                           Simulateur_Itr.First_Comp_Value,
                                           Set_Of_Links.Linked, Links);
            else

                Set_Of_Links.Modify_State
                   (Image (E.Var1_Lie), Image (E.Var2_Lie),
                    Set_Of_Links.Linked, Links);
            end if;
        end if;
        Text_Io.Put_Line (" fin de lie_lien ");
    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) is
    begin
        Text_Io.Put_Line (" execution delie_lien ");
        Afficher (E);
        if Image (E.Var1_Lie) = "COMP" then
            Set_Of_Links.Modify_State
               (Simulateur_Itr.First_Comp_Value,
                Image (E.Var2_Lie), Set_Of_Links.Unlinked, Links);
        else
            if Image (E.Var2_Lie) = "COMP" then
                Set_Of_Links.Modify_State (Image (E.Var1_Lie),
                                           Simulateur_Itr.First_Comp_Value,
                                           Set_Of_Links.Unlinked, Links);
            else

                Set_Of_Links.Modify_State
                   (Image (E.Var1_Lie), Image (E.Var2_Lie),
                    Set_Of_Links.Unlinked, Links);
            end if;
        end if;
        Text_Io.Put_Line (" fin de delie_lien ");
    end Executer_Delie_Lien;

    procedure Executer_Liste (E : Itemtype;
                              Models_Table : Models.Object;
                              Symbols_Table : Symbols.Object;
                              Links : in out Set_Of_Links.Object) is
    begin
        Text_Io.Put_Line (" execution liste_lien ");
        Afficher (E);  
        if E.Etat = Lie then
            if Image (E.Var_Liste) = "COMP" then
                Set_Of_Links.List (Simulateur_Itr.First_Comp_Value,
                                   Set_Of_Links.Linked, Links);  
            else  
                Set_Of_Links.List (Image (E.Var_Liste),
                                   Set_Of_Links.Linked, Links);
            end if;  
        else
            if Image (E.Var_Liste) = "COMP" then
                Set_Of_Links.List (Simulateur_Itr.First_Comp_Value,
                                   Set_Of_Links.Unlinked, Links);
            else
                Set_Of_Links.List (Image (E.Var_Liste),
                                   Set_Of_Links.Unlinked, Links);
            end if;  
        end if;
        Text_Io.Put_Line (" fin de liste_lien ");
    end Executer_Liste;

    procedure Executer_Echanger (E : Itemtype;
                                 Models_Table : Models.Object;
                                 Symbols_Table : Symbols.Object;
                                 Links : in out Set_Of_Links.Object) is
    begin
        Text_Io.Put_Line (" execution echanger_lien ");
        Afficher (E);  
        if Image (E.Var1_Ech) = "COMP" then
            Set_Of_Links.Exchange
               (Simulateur_Itr.First_Comp_Value,
                Image (E.Var2_Ech), Image (E.Var3_Ech), Links);
        else
            if Image (E.Var2_Ech) = "COMP" then
                Set_Of_Links.Exchange (Image (E.Var1_Ech),
                                       Simulateur_Itr.First_Comp_Value,
                                       Image (E.Var3_Ech), Links);
            else
                if Image (E.Var3_Ech) = "COMP" then
                    Set_Of_Links.Exchange
                       (Image (E.Var1_Ech), Image (E.Var2_Ech),
                        Simulateur_Itr.First_Comp_Value, Links);
                else
                    Set_Of_Links.Exchange
                       (Image (E.Var1_Lie), Image (E.Var2_Lie),
                        Image (E.Var3_Ech), Links);
                end if;
            end if;  
        end if;
        Text_Io.Put_Line (" fin de echanger_lien ");
    end Executer_Echanger;

    procedure Executer_Afficher (E : Itemtype;
                                 Models_Table : Models.Object;
                                 Symbols_Table : Symbols.Object) is
    begin
        Text_Io.Put_Line (" execution afficher ");
        Afficher (E);  
        Text_Io.Put_Line (" fin de afficher ");
    end Executer_Afficher;

    procedure Executer_Fin (E : Itemtype) is
    begin
        Text_Io.Put_Line (" execution fin ");
        Afficher (E);  
        Text_Io.Put_Line (" fin de fin ");
    end Executer_Fin;

    procedure Executer_Vide (E : Itemtype) is
    begin
        Text_Io.Put_Line (" execution vide ");
        Afficher (E);  
        Text_Io.Put_Line (" fin de vide ");
    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 => -- a completer
                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=25
    nid=25
    hdr6=48
        [0x00] rec0=26 rec1=00 rec2=01 rec3=00a
        [0x01] rec0=2b rec1=00 rec2=1a rec3=018
        [0x02] rec0=01 rec1=00 rec2=05 rec3=02a
        [0x03] rec0=22 rec1=00 rec2=06 rec3=00a
        [0x04] rec0=20 rec1=00 rec2=07 rec3=01a
        [0x05] rec0=22 rec1=00 rec2=08 rec3=03a
        [0x06] rec0=26 rec1=00 rec2=13 rec3=01e
        [0x07] rec0=13 rec1=00 rec2=09 rec3=002
        [0x08] rec0=18 rec1=00 rec2=11 rec3=01e
        [0x09] rec0=23 rec1=00 rec2=0e rec3=010
        [0x0a] rec0=16 rec1=00 rec2=0a rec3=03a
        [0x0b] rec0=15 rec1=00 rec2=10 rec3=05c
        [0x0c] rec0=00 rec1=00 rec2=12 rec3=028
        [0x0d] rec0=16 rec1=00 rec2=15 rec3=02c
        [0x0e] rec0=1e rec1=00 rec2=16 rec3=03c
        [0x0f] rec0=14 rec1=00 rec2=19 rec3=008
        [0x10] rec0=00 rec1=00 rec2=0c rec3=00e
        [0x11] rec0=14 rec1=00 rec2=02 rec3=010
        [0x12] rec0=01 rec1=00 rec2=1f rec3=028
        [0x13] rec0=1e rec1=00 rec2=14 rec3=014
        [0x14] rec0=02 rec1=00 rec2=03 rec3=00a
        [0x15] rec0=15 rec1=00 rec2=04 rec3=04c
        [0x16] rec0=1b rec1=00 rec2=1c rec3=008
        [0x17] rec0=15 rec1=00 rec2=1b rec3=076
        [0x18] rec0=18 rec1=00 rec2=20 rec3=074
        [0x19] rec0=12 rec1=00 rec2=24 rec3=064
        [0x1a] rec0=12 rec1=00 rec2=21 rec3=008
        [0x1b] rec0=17 rec1=00 rec2=23 rec3=05a
        [0x1c] rec0=18 rec1=00 rec2=22 rec3=024
        [0x1d] rec0=17 rec1=00 rec2=17 rec3=03e
        [0x1e] rec0=17 rec1=00 rec2=1e rec3=010
        [0x1f] rec0=18 rec1=00 rec2=18 rec3=01c
        [0x20] rec0=14 rec1=00 rec2=0f rec3=016
        [0x21] rec0=1d rec1=00 rec2=1d rec3=01e
        [0x22] rec0=20 rec1=00 rec2=0b rec3=002
        [0x23] rec0=05 rec1=00 rec2=0d rec3=001
        [0x24] rec0=86 rec1=ba rec2=42 rec3=400
    tail 0x215437024865183dd1058 0x42a00088462060003
Free Block Chain:
  0x25: 0000  00 00 00 95 80 0e 20 3d 20 22 43 4f 4d 50 22 20  ┆       = "COMP" ┆