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

⟦4fae0eb96⟧ Ada Source

    Length: 6144 (0x1800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Symbol, seg_03610b, seg_03639b, seg_036908

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 Block;
with Table;  
with Object;
package body Symbol is

    function Eval (Name : Message.Tiny_String) return Object.Reference is
        New_Reference : Object.Reference := Object.Void_Reference;
        Success : Boolean := False;
        Current_Table : Table.Symbol_Kind;
    begin
        Find (Name, New_Reference, Current_Table, Success);
        return Table.Eval (Current_Table, Name);
    end Eval;

    procedure Find (Name : Message.Tiny_String;
                    New_Reference : in out Object.Reference;
                    Current_Table : out Table.Symbol_Kind;
                    Is_Found : out Boolean) is
        use Block;
        Current_Node : Block.Node := Block.Current;
        Success : Boolean := False;  
        Origin_Table, Table_In_Use : Table.Symbol_Kind :=
           Block.Symbol (Current_Node);
    begin  
        while (Current_Node /= Block.Empty_Node) loop
            Table.Find (The_Table => Table_In_Use,
                        Name => Name,
                        New_Reference => New_Reference,
                        Success => Success);
            exit when Success;

            Current_Node := Block.Parent (Current_Node);
            if Current_Node /= Block.Empty_Node then
                Table_In_Use := Block.Symbol (Current_Node);
            end if;
        end loop;
        if Success then
            Current_Table := Table_In_Use;
        else
            Current_Table := Origin_Table;
        end if;
        Is_Found := Success;  
    end Find;

    procedure Insert (Name : Message.Tiny_String;
                      New_Reference : Object.Reference) is
        Object_Found : Object.Reference := Object.Void_Reference;
        Table_In_Use : Table.Symbol_Kind;
        Is_Found : Boolean := False;
    begin
        Find (Name, Object_Found, Table_In_Use, Is_Found);
        Table.Insert (Table_In_Use, Name, New_Reference);
    end Insert;

    procedure In_Text is
        Current_Node : Block.Node := Block.Current;
        Table_In_Use : Table.Symbol_Kind;
        use Block;
    begin
        Table_In_Use := Block.Symbol (Current_Node);
        while (Current_Node /= Block.Empty_Node) loop
            Table.In_Text (Table_In_Use);
            Current_Node := Block.Parent (Current_Node);
            if Current_Node /= Block.Empty_Node then
                Table_In_Use := Block.Symbol (Current_Node);
            end if;
        end loop;
    end In_Text;
end Symbol;

E3 Meta Data

    nblk1=5
    nid=4
    hdr6=6
        [0x00] rec0=1b rec1=00 rec2=01 rec3=05e
        [0x01] rec0=1b rec1=00 rec2=03 rec3=01a
        [0x02] rec0=11 rec1=00 rec2=05 rec3=000
        [0x03] rec0=04 rec1=00 rec2=04 rec3=000
        [0x04] rec0=0c rec1=00 rec2=02 rec3=000
    tail 0x21732fdc084dd85c81a45 0x42a00088462060003
Free Block Chain:
  0x4: 0000  00 02 02 2f 80 17 20 20 20 70 72 6f 63 65 64 75  ┆   /     procedu┆
  0x2: 0000  00 00 00 14 80 11 20 20 54 61 62 6c 65 2e 46 69  ┆        Table.Fi┆