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

⟦20cf9ceaa⟧ Ada Source

    Length: 5120 (0x1400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Check_Structure, seg_0484c0, seg_048c52, seg_048cc1, seg_048e00

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 Error;
with Nos_Chaines;
with Nos_Listes;
with Structure_Des_Variables;
use Structure_Des_Variables;

package body Check_Structure is

    package Liste_Nom is new Nos_Listes (Nos_Chaines.String_Text);

    function Lieu_Is_Ok (La_Variable : Cellule) return Boolean is
        La_Direction : Type_Direction;
        Liste_Nom_Direction : Liste_Nom.Objet;
        Iterateur_Lieu : Liste_Direction.Iterateur;
        Double : Boolean;
    begin
        Double := False;
        Liste_Direction.First (Iterateur_Lieu,
                               La_Variable.Specif.Direction_Lieu);
        while ((not Double) and
               not Liste_Direction.At_End (Iterateur_Lieu)) loop
            La_Direction := Liste_Direction.Consult (Iterateur_Lieu);
            Double := Liste_Nom.Found
                         (Liste_Nom_Direction, La_Direction.Direction);
            if not Double then
                Liste_Nom.Add (Liste_Nom_Direction, La_Direction.Direction);
            end if;
            Liste_Direction.Next (Iterateur_Lieu);
        end loop;  
        return (not Double);
    end Lieu_Is_Ok;

    function Structure_Is_Ok return Boolean is
        Ok : Boolean;
        La_Variable : Cellule;
        Nom_Variable : Nos_Chaines.String_Text;
        Iterateur_Direction : Liste_Direction.Iterateur;
    begin
        Ok := True;
        Premier;
        while (not Fin) loop
            La_Variable := Suivant;
            if not La_Variable.Complet then
                Ok := False;
                Error.Semantic (La_Variable.Nom, Error.Definition_Incomplete);
            else
                case La_Variable.Type_Variable is
                    when Personnage =>
                        if (La_Variable.Specif.Position_Personnage = null) then
                            Ok := False;
                            Error.Semantic (La_Variable.Nom,
                                            Error.Absence_Position);
                        end if;
                    when Objet =>
                        if (La_Variable.Specif.Position_Objet = null) then
                            Ok := False;
                            Error.Semantic (La_Variable.Nom,
                                            Error.Absence_Position);
                        end if;
                    when Lieu =>
                        if (not Lieu_Is_Ok (La_Variable)) then
                            Ok := False;
                            Error.Semantic (La_Variable.Nom,
                                            Error.Deux_Directions_Identiques);
                        end if;
                    when others =>
                        null;
                end case;
            end if;
        end loop;
        return Ok;
    end Structure_Is_Ok;

end Check_Structure;

E3 Meta Data

    nblk1=4
    nid=2
    hdr6=6
        [0x00] rec0=1b rec1=00 rec2=01 rec3=08a
        [0x01] rec0=1a rec1=00 rec2=04 rec3=076
        [0x02] rec0=18 rec1=00 rec2=03 rec3=000
        [0x03] rec0=08 rec1=00 rec2=03 rec3=000
    tail 0x215454c9a86587ffa5c52 0x42a00088462060003
Free Block Chain:
  0x2: 0000  00 00 03 fc 80 19 20 20 20 20 20 20 20 20 20 20  ┆                ┆