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

⟦1ea555a43⟧ Ada Source

    Length: 10240 (0x2800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Variable, seg_046593, seg_046959

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;
with Create_Structure;
with Nos_Chaines;
with Lex;

package body Variable is

    type Attribut is (Contenu, Etat, Possession);

    procedure Autre_Possession_Contenu_Etat
                 (Ok : in out Boolean;
                  Le_Champ : Attribut;
                  Le_Sens : Structure_Des_Variables.Enum_Sens);

    procedure Existence_Parse (Ok : in out Boolean) is
        use Lex;
    begin
        if (Lex.Get_Token = L_Est) then
            Create_Structure.Associate_Existence (True);
            Lex.Next;
            Ok := True;
        else
            if (Lex.Get_Token = L_Sera) then
                Create_Structure.Associate_Existence (False);
                Lex.Next;
                Ok := True;
            else
                Ok := False;
            end if;
        end if;
    end Existence_Parse;


    procedure Description_Parse (Ok : in out Boolean;
                                 Le_Sens : Structure_Des_Variables.Enum_Sens) is
        use Lex;
    begin
        if Lex.Get_Token = L_Description then
            if Lex.Next_Token = L_Colon then
                if Lex.Next_Token = L_Text then
                    Create_Structure.Associate_Description
                       (Lex.Get_Value, Le_Sens);
                    Lex.Next;
                    Ok := True;
                else
                    Ok := False;
                end if;
            else
                Ok := False;
            end if;
        else
            Ok := True;
        end if;
    end Description_Parse;


    procedure Position_Parse (Ok : in out Boolean) is
        use Lex;
    begin  
        Ok := False;
        if Lex.Get_Token = L_Position then
            if Lex.Next_Token = L_Colon then
                if Lex.Next_Token = L_Id then
                    Create_Structure.Associate_Position (Lex.Get_Value);
                    Lex.Next;
                    Ok := True;
                end if;
            end if;
        end if;
    end Position_Parse;

    procedure Etat_Parse (Ok : in out Boolean;
                          Le_Sens : Structure_Des_Variables.Enum_Sens) is
        use Lex;
    begin
        if Lex.Get_Token = L_Etat then
            if Lex.Next_Token = L_Colon then
                if Lex.Next_Token = L_Id then
                    Create_Structure.Associate_Etat (Lex.Get_Value, Le_Sens);
                    Lex.Next;
                    Autre_Possession_Contenu_Etat (Ok, Etat, Le_Sens);
                else
                    Ok := False;
                end if;
            else
                Ok := False;
            end if;
        else
            Ok := True;
        end if;
    end Etat_Parse;


    procedure Possession_Parse (Ok : in out Boolean) is
        use Lex;  
        Le_Sens : Structure_Des_Variables.Enum_Sens;
    begin  
        Le_Sens := Structure_Des_Variables.Pas_De_Sens;
        if Lex.Get_Token = L_Possession then
            if Lex.Next_Token = L_Colon then
                if Lex.Next_Token = L_Id then
                    Create_Structure.Associate_Possession (Lex.Get_Value);
                    Lex.Next;
                    Autre_Possession_Contenu_Etat (Ok, Possession, Le_Sens);
                else
                    Ok := False;
                end if;
            else
                Ok := False;
            end if;
        else
            Ok := True;
        end if;
    end Possession_Parse;


    procedure Contenu_Parse (Ok : in out Boolean) is
        use Lex;  
        Le_Sens : Structure_Des_Variables.Enum_Sens;
    begin  
        Le_Sens := Structure_Des_Variables.Pas_De_Sens;
        if Lex.Get_Token = L_Contenu then
            if Lex.Next_Token = L_Colon then
                if Lex.Next_Token = L_Id then
                    Create_Structure.Associate_Contenu (Lex.Get_Value);
                    Lex.Next;
                    Autre_Possession_Contenu_Etat (Ok, Contenu, Le_Sens);
                else
                    Ok := False;
                end if;
            else
                Ok := False;
            end if;
        else
            Ok := True;
        end if;
    end Contenu_Parse;


    procedure Autre_Possession_Contenu_Etat
                 (Ok : in out Boolean;
                  Le_Champ : Attribut;
                  Le_Sens : Structure_Des_Variables.Enum_Sens) is
        use Lex;
    begin
        if Lex.Get_Token = L_Coma then
            if Lex.Next_Token = L_Id then
                case Le_Champ is
                    when Contenu =>
                        Create_Structure.Associate_Contenu (Lex.Get_Value);
                    when Etat =>
                        Create_Structure.Associate_Etat
                           (Lex.Get_Value, Le_Sens);
                    when Possession =>
                        Create_Structure.Associate_Possession (Lex.Get_Value);
                end case;
                Lex.Next;
                Autre_Possession_Contenu_Etat (Ok, Le_Champ, Le_Sens);
            else
                Ok := False;
            end if;
        else
            Ok := True;
        end if;
    end Autre_Possession_Contenu_Etat;

    procedure Valeur_Parse (Ok : in out Boolean) is
        use Lex;
    begin
        if Lex.Get_Token = L_Valeur then
            if Lex.Next_Token = L_Colon then
                if Lex.Next_Token = L_Number then
                    Create_Structure.Associate_Valeur
                       (Integer'Value (Nos_Chaines.Infinite_String.Image
                                          (Lex.Get_Value)));
                    Lex.Next;
                    Ok := True;
                else
                    Ok := False;
                end if;
            else
                Ok := False;
            end if;
        else
            Ok := True;
        end if;
    end Valeur_Parse;

end Variable;

E3 Meta Data

    nblk1=9
    nid=2
    hdr6=e
        [0x00] rec0=24 rec1=00 rec2=01 rec3=04c
        [0x01] rec0=1f rec1=00 rec2=05 rec3=012
        [0x02] rec0=20 rec1=00 rec2=07 rec3=03a
        [0x03] rec0=1b rec1=00 rec2=04 rec3=086
        [0x04] rec0=1d rec1=00 rec2=09 rec3=04c
        [0x05] rec0=1d rec1=00 rec2=06 rec3=016
        [0x06] rec0=07 rec1=00 rec2=03 rec3=000
        [0x07] rec0=1f rec1=00 rec2=09 rec3=001
        [0x08] rec0=f5 rec1=18 rec2=00 rec3=004
    tail 0x21543089686506788983d 0x42a00088462060003
Free Block Chain:
  0x2: 0000  00 08 03 bf 80 21 65 6e 75 5f 45 74 61 74 20 28  ┆     !enu_Etat (┆
  0x8: 0000  00 00 00 04 80 01 4c 01 02 20 4c 05 3a 3d 20 46  ┆      L   L := F┆