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

⟦31ea01f33⟧ Ada Source

    Length: 22528 (0x5800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Modify_Structure, seg_045deb, seg_04847d, seg_0484c8, seg_0486d7

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 
└─⟦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 Structure_Des_Variables;
use Structure_Des_Variables;

package body Modify_Structure is

    type Pointeur_De_Chaine is access Nos_Chaines.String_Text;


    ---------------------------------------------------------------
    --|
    --| Ajoute un etat a la liste d'etats d'une variable (s'il ne
    --| s'y trouve pas deja)
    --|
    --| Parametres d'entree :
    --|   Nom_variable : nom de la variable sur laquelle porte la
    --|                  modification (type Nos_Chaines.String_Text)
    --|   Ajout : etat a ajouter a la liste
    --|           (type Nos_Chaines.String_Text)
    --|   Sens : pour une communication, precise le sens concerne
    --|          par la modification (type Enum_Sens)
    --|
    ---------------------------------------------------------------
    procedure Ajouter_Etat (Nom_Variable : Nos_Chaines.String_Text;
                            Ajout : Nos_Chaines.String_Text;
                            Sens : Structure_Des_Variables.Enum_Sens) is
        Trouve : Boolean;
        Variable_A_Modifier : Structure_Des_Variables.Cellule;
        Nouvel_Etat : Pointeur_De_Chaine;
    begin
        Nos_Chaines.Copy (Variable_A_Modifier.Nom, Nom_Variable);  
        Structure_Des_Variables.Find (Variable_A_Modifier, Trouve);
        if Trouve then
            Nouvel_Etat := new Nos_Chaines.String_Text;
            Nos_Chaines.Copy (Nouvel_Etat.all, Ajout);
            case Variable_A_Modifier.Type_Variable is
                when Communication =>
                    case Sens is
                        when Sens1 =>
                            Liste_Etat.Add (Variable_A_Modifier.Specif.
                                            Sens1.Etat_Communication,
                                            Nouvel_Etat.all);
                        when Sens2 =>
                            Liste_Etat.Add (Variable_A_Modifier.Specif.
                                            Sens2.Etat_Communication,
                                            Nouvel_Etat.all);
                        when Les_Deux_Sens =>
                            Liste_Etat.Add (Variable_A_Modifier.Specif.
                                            Sens1.Etat_Communication,
                                            Nouvel_Etat.all);
                            Liste_Etat.Add (Variable_A_Modifier.Specif.
                                            Sens2.Etat_Communication,
                                            Nouvel_Etat.all);
                        when others =>
                            null;
                    end case;
                when Lieu =>
                    Liste_Etat.Add (Variable_A_Modifier.Specif.Etat_Lieu,
                                    Nouvel_Etat.all);
                when Objet =>
                    Liste_Etat.Add (Variable_A_Modifier.Specif.Etat_Objet,
                                    Nouvel_Etat.all);
                when Personnage =>
                    Liste_Etat.Add (Variable_A_Modifier.Specif.Etat_Personnage,
                                    Nouvel_Etat.all);
                when others =>
                    null;
            end case;
            Structure_Des_Variables.Replace (Variable_A_Modifier);
        end if;
    end Ajouter_Etat;

    ---------------------------------------------------------------
    --|
    --| Supprime un etat a la liste d'etats d'une variable (s'il
    --| s'y trouve effectivement)
    --|
    --| Parametres d'entree :
    --|   Nom_variable : nom de la variable sur laquelle porte la
    --|                  modification (type Nos_Chaines.String_Text)
    --|   A_Supprimer : etat a supprimer a la liste
    --|                 (type Nos_Chaines.String_Text)
    --|   Sens : pour une communication, precise le sens concerne
    --|          par la modification (type Enum_Sens)
    --|
    ---------------------------------------------------------------
    procedure Supprimer_Etat (Nom_Variable : Nos_Chaines.String_Text;
                              A_Supprimer : Nos_Chaines.String_Text;
                              Sens : Structure_Des_Variables.Enum_Sens) is
        Trouve : Boolean;
        Variable_A_Modifier : Structure_Des_Variables.Cellule;
    begin
        Nos_Chaines.Copy (Variable_A_Modifier.Nom, Nom_Variable);
        Structure_Des_Variables.Find (Variable_A_Modifier, Trouve);
        if Trouve then
            case Variable_A_Modifier.Type_Variable is
                when Communication =>
                    case Sens is
                        when Sens1 =>
                            Liste_Etat.Delete
                               (Variable_A_Modifier.Specif.
                                Sens1.Etat_Communication, A_Supprimer);
                        when Sens2 =>
                            Liste_Etat.Delete
                               (Variable_A_Modifier.Specif.
                                Sens2.Etat_Communication, A_Supprimer);
                        when Les_Deux_Sens =>
                            Liste_Etat.Delete
                               (Variable_A_Modifier.Specif.
                                Sens1.Etat_Communication, A_Supprimer);
                            Liste_Etat.Delete
                               (Variable_A_Modifier.Specif.
                                Sens2.Etat_Communication, A_Supprimer);
                        when others =>
                            null;
                    end case;
                when Lieu =>
                    Liste_Etat.Delete
                       (Variable_A_Modifier.Specif.Etat_Lieu, A_Supprimer);
                when Objet =>
                    Liste_Etat.Delete
                       (Variable_A_Modifier.Specif.Etat_Objet, A_Supprimer);
                when Personnage =>
                    Liste_Etat.Delete
                       (Variable_A_Modifier.Specif.Etat_Personnage,
                        A_Supprimer);
                when others =>
                    null;
            end case;
            Structure_Des_Variables.Replace (Variable_A_Modifier);
        end if;
    end Supprimer_Etat;

    ---------------------------------------------------------------
    --|
    --| Ajoute un contenu ou une possession a la liste de contenus
    --| ou de possessions d'une variable (si cet element ne s'y
    --| trouve pas deja)
    --|
    --| Parametres d'entree :
    --|   Nom_variable : nom de la variable sur laquelle porte la
    --|                  modification (type Nos_Chaines.String_Text)
    --|   Ajout : element a ajouter a la liste concernee
    --|          (type Nos_Chaines.String_Text)
    --|
    ---------------------------------------------------------------
    procedure Ajouter_Contenu_Possession
                 (Nom_Variable : Nos_Chaines.String_Text;
                  Ajout : Nos_Chaines.String_Text) is
        Contenu_Possession : Structure_Des_Variables.Cellule;
        Ptr_Contenu_Possession : Structure_Des_Variables.P_Cellule;
        Trouve : Boolean;
        Variable_A_Modifier : Structure_Des_Variables.Cellule;
    begin
        Nos_Chaines.Copy (Variable_A_Modifier.Nom, Nom_Variable);
        Structure_Des_Variables.Find (Variable_A_Modifier, Trouve);
        if Trouve then
            Nos_Chaines.Copy (Contenu_Possession.Nom, Ajout);
            Structure_Des_Variables.Find (Contenu_Possession, Trouve);
            if Trouve then
                Ptr_Contenu_Possession := new Cellule;
                Ptr_Contenu_Possession.all := Contenu_Possession;
                case Variable_A_Modifier.Type_Variable is
                    when Objet =>
                        Liste_Contenu.Add (Variable_A_Modifier.
                                           Specif.Contenu_Objet,
                                           Ptr_Contenu_Possession);
                    when Personnage =>
                        Liste_Possession.Add (Variable_A_Modifier.Specif.
                                              Possession_Personnage,
                                              Ptr_Contenu_Possession);
                    when others =>
                        null;
                end case;
                Structure_Des_Variables.Replace (Variable_A_Modifier);
            end if;  
        end if;
    end Ajouter_Contenu_Possession;

    ---------------------------------------------------------------
    --|
    --| Supprime un contenu ou une possession a la liste de contenus
    --| ou de possessions d'une variable (si cet element s'y trouve
    --| effectivement)
    --|
    --| Parametres d'entree :
    --|   Nom_variable : nom de la variable sur laquelle porte la
    --|                  modification (type Nos_Chaines.String_Text)
    --|   Ajout : element a supprimer a la liste concernee
    --|          (type Nos_Chaines.String_Text)
    --|
    ---------------------------------------------------------------
    procedure Supprimer_Contenu_Possession
                 (Nom_Variable : Nos_Chaines.String_Text;
                  A_Supprimer : Nos_Chaines.String_Text) is
        Contenu_Possession : Structure_Des_Variables.Cellule;
        Ptr_Contenu_Possession : Structure_Des_Variables.P_Cellule;
        Trouve : Boolean;
        Variable_A_Modifier : Structure_Des_Variables.Cellule;
    begin
        Nos_Chaines.Copy (Variable_A_Modifier.Nom, Nom_Variable);
        Structure_Des_Variables.Find (Variable_A_Modifier, Trouve);
        if Trouve then
            Nos_Chaines.Copy (Contenu_Possession.Nom, A_Supprimer);
            Structure_Des_Variables.Find (Contenu_Possession, Trouve);
            if Trouve then
                Ptr_Contenu_Possession := new Cellule;
                Ptr_Contenu_Possession.all := Contenu_Possession;
                case Variable_A_Modifier.Type_Variable is
                    when Objet =>
                        Liste_Contenu.Delete (Variable_A_Modifier.
                                              Specif.Contenu_Objet,
                                              Ptr_Contenu_Possession);
                    when Personnage =>
                        Liste_Possession.Delete
                           (Variable_A_Modifier.Specif.Possession_Personnage,
                            Ptr_Contenu_Possession);
                    when others =>
                        null;
                end case;
                Structure_Des_Variables.Replace (Variable_A_Modifier);
            end if;
        end if;
    end Supprimer_Contenu_Possession;

    ---------------------------------------------------------------
    --|
    --| Modifie le champ position d'une variable
    --|
    --| Parametres d'entree :
    --|   Nom_variable : nom de la variable sur laquelle porte la
    --|                  modification (type Nos_Chaines.String_Text)
    --|   Nouvelle_Position : nom de la nouvelle position
    --|                       (type Nos_Chaines.String_Text)
    --|
    ---------------------------------------------------------------
    procedure Modifier_Position (Nom_Variable : Nos_Chaines.String_Text;
                                 Nouvelle_Position : Nos_Chaines.String_Text) is
        La_Position : Structure_Des_Variables.Cellule;
        Ptr_Position : Structure_Des_Variables.P_Cellule;
        Trouve : Boolean;
        Variable_A_Modifier : Structure_Des_Variables.Cellule;
    begin
        Nos_Chaines.Copy (Variable_A_Modifier.Nom, Nom_Variable);
        Structure_Des_Variables.Find (Variable_A_Modifier, Trouve);
        if Trouve then
            Nos_Chaines.Copy (La_Position.Nom, Nouvelle_Position);
            Structure_Des_Variables.Find (La_Position, Trouve);
            if Trouve then  
                Ptr_Position := new Cellule;
                Ptr_Position.all := La_Position;
                case Variable_A_Modifier.Type_Variable is
                    when Objet =>
                        Variable_A_Modifier.Specif.Position_Objet :=
                           Ptr_Position;
                    when Personnage =>
                        Variable_A_Modifier.Specif.Position_Personnage :=
                           Ptr_Position;
                    when others =>
                        null;
                end case;
                Structure_Des_Variables.Replace (Variable_A_Modifier);
            end if;
        end if;
    end Modifier_Position;
    -- IL Y A LA 1 ERREUR IRREDUCTIBLE DS LE CAS OU 1 OBJ 'A', REF DE LIEU
    -- D'1 OBJET 'B' PREND CET OBJET 'B' PR Nelle POSITION
    -- ********************************************************************
    -- ********************************************************************

    ---------------------------------------------------------------
    --|
    --| Modifie le champ description d'une variable
    --|
    --| Parametres d'entree :
    --|   Nom_variable : nom de la variable sur laquelle porte la
    --|                  modification (type Nos_Chaines.String_Text)
    --|   Description : nouvelle description
    --|                 (type Nos_Chaines.String_Text)
    --|   Sens : pour une communication, precise le sens concerne
    --|          par la modification (type Enum_Sens)
    --|
    ---------------------------------------------------------------
    procedure Modifier_Description
                 (Nom_Variable : Nos_Chaines.String_Text;
                  Nouvelle_Description : Nos_Chaines.String_Text;
                  Sens : Structure_Des_Variables.Enum_Sens) is
        Trouve : Boolean;
        Variable_A_Modifier : Structure_Des_Variables.Cellule;
    begin
        Nos_Chaines.Copy (Variable_A_Modifier.Nom, Nom_Variable);
        Structure_Des_Variables.Find (Variable_A_Modifier, Trouve);
        if Trouve then
            case Variable_A_Modifier.Type_Variable is
                when Communication =>
                    case Sens is
                        when Sens1 =>
                            Nos_Chaines.Copy (Variable_A_Modifier.Specif.
                                              Sens1.Description_Communication,
                                              Nouvelle_Description);
                        when Sens2 =>
                            Nos_Chaines.Copy (Variable_A_Modifier.Specif.
                                              Sens2.Description_Communication,
                                              Nouvelle_Description);
                        when Les_Deux_Sens =>
                            Nos_Chaines.Copy (Variable_A_Modifier.Specif.
                                              Sens1.Description_Communication,
                                              Nouvelle_Description);
                            Nos_Chaines.Copy (Variable_A_Modifier.Specif.
                                              Sens2.Description_Communication,
                                              Nouvelle_Description);
                        when others =>
                            null;
                    end case;
                when Lieu =>
                    Nos_Chaines.Copy (Variable_A_Modifier.
                                      Specif.Description_Lieu,
                                      Nouvelle_Description);
                when Objet =>
                    Nos_Chaines.Copy (Variable_A_Modifier.
                                      Specif.Description_Objet,
                                      Nouvelle_Description);
                when Personnage =>
                    Nos_Chaines.Copy (Variable_A_Modifier.Specif.
                                      Description_Personnage,
                                      Nouvelle_Description);
                when others =>
                    null;
            end case;
            Structure_Des_Variables.Replace (Variable_A_Modifier);
        end if;
    end Modifier_Description;

    ---------------------------------------------------------------
    --|
    --| Modifie le champ valeur d'une variable
    --|
    --| Parametres d'entree :
    --|   Nom_variable : nom de la variable sur laquelle porte la
    --|                  modification (type Nos_Chaines.String_Text)
    --|   Valeur : nouvelle valeur
    --|          (type integer)
    --|
    ---------------------------------------------------------------
    procedure Modifier_Valeur (Nom_Variable : Nos_Chaines.String_Text;
                               Nouvelle_Valeur : Integer) is
        Trouve : Boolean;
        Variable_A_Modifier : Structure_Des_Variables.Cellule;
    begin
        Nos_Chaines.Copy (Variable_A_Modifier.Nom, Nom_Variable);
        Structure_Des_Variables.Find (Variable_A_Modifier, Trouve);
        if Trouve then
            if (Variable_A_Modifier.Type_Variable = Compteur) then
                Variable_A_Modifier.Specif.Valeur_Compteur := Nouvelle_Valeur;
            end if;
            Structure_Des_Variables.Replace (Variable_A_Modifier);
        end if;
    end Modifier_Valeur;


    ---------------------------------------------------------------
    --|
    --| Modifie le champ existe d'une variable.
    --|
    --| Parametres d'entree :
    --|   Nom_variable : nom de la variable sur laquelle porte la
    --|                  modification (type Nos_Chaines.String_Text)
    --|   Existence : nouvel etat d'existence
    --|               (type boolean)
    --|
    ---------------------------------------------------------------
    procedure Modifier_Existence (Nom_Variable : Nos_Chaines.String_Text;
                                  Existence : Boolean) is
        Trouve : Boolean;
        Variable_A_Modifier : Structure_Des_Variables.Cellule;
    begin
        Nos_Chaines.Copy (Variable_A_Modifier.Nom, Nom_Variable);
        Structure_Des_Variables.Find (Variable_A_Modifier, Trouve);
        if Trouve then
            Variable_A_Modifier.Existe := Existence;
            Structure_Des_Variables.Replace (Variable_A_Modifier);
        end if;
    end Modifier_Existence;

end Modify_Structure;

E3 Meta Data

    nblk1=15
    nid=f
    hdr6=26
        [0x00] rec0=1a rec1=00 rec2=01 rec3=05a
        [0x01] rec0=13 rec1=00 rec2=0b rec3=07e
        [0x02] rec0=13 rec1=00 rec2=08 rec3=004
        [0x03] rec0=17 rec1=00 rec2=10 rec3=006
        [0x04] rec0=13 rec1=00 rec2=04 rec3=036
        [0x05] rec0=13 rec1=00 rec2=15 rec3=086
        [0x06] rec0=19 rec1=00 rec2=13 rec3=00a
        [0x07] rec0=12 rec1=00 rec2=14 rec3=03c
        [0x08] rec0=16 rec1=00 rec2=09 rec3=05a
        [0x09] rec0=14 rec1=00 rec2=0a rec3=00c
        [0x0a] rec0=16 rec1=00 rec2=0d rec3=06e
        [0x0b] rec0=13 rec1=00 rec2=0e rec3=054
        [0x0c] rec0=16 rec1=00 rec2=12 rec3=02c
        [0x0d] rec0=14 rec1=00 rec2=0c rec3=02c
        [0x0e] rec0=10 rec1=00 rec2=11 rec3=092
        [0x0f] rec0=14 rec1=00 rec2=07 rec3=02a
        [0x10] rec0=18 rec1=00 rec2=06 rec3=03c
        [0x11] rec0=18 rec1=00 rec2=02 rec3=048
        [0x12] rec0=09 rec1=00 rec2=03 rec3=000
        [0x13] rec0=00 rec1=00 rec2=00 rec3=000
        [0x14] rec0=00 rec1=00 rec2=00 rec3=000
    tail 0x2154269a8864c83eaf5d9 0x42a00088462060003
Free Block Chain:
  0xf: 0000  00 05 00 bc 80 09 72 6f 75 76 65 29 3b 20 20 09  ┆      rouve);   ┆
  0x5: 0000  00 00 00 bb 80 1b 20 20 20 20 20 4e 6f 75 76 65  ┆           Nouve┆