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

⟦acc186d0c⟧ Ada Source

    Length: 10240 (0x2800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Links, seg_0045b0, separate Object_Info

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



separate (Object_Info)
package body Links is

    --[BE CAREFUL NOT TO INTRODUCE MUTUAL RECURSION]
    --[BETWEEN THIS PACKAGE AND OBJECT_INFO.CMVC   ]

    function "=" (This_Kind : in Link_Tools.Link_Kind;  
                  That_Kind : in Link_Tools.Link_Kind)  
                 return Boolean renames Link_Tools."=";

    function Links_For
                (This_World : in World; Used_Only : in Boolean) return Links is

        Links : Link_Tools.Link_Iterator;

        The_Links : Objects := Directory_Tools.Object.Create;

        Dummy : Boolean;

    begin
        if not Any.Is_World (This_World) then
            return Utilities.Bad_Objects;
        end if;
        Link_Tools.Init
           (Links, World => Directory_Tools.Naming.Full_Name (This_World));
        while not Link_Tools.Done (Links) loop
            declare
                The_Link : Link := Directory_Tools.Naming.Resolution
                                      (Link_Tools.Source (Links));
            begin
                if Used_Only then
                    if Object_Info.Links.Is_Used
                          (The_Link, In_World => This_World) then
                        Directory_Tools.Object.Add (The_Links, The_Link, Dummy);
                    end if;
                else
                    Directory_Tools.Object.Add (The_Links, The_Link, Dummy);
                end if;  
            end;
            Link_Tools.Next (Links);
        end loop;  
        Directory_Tools.Object.Reset (The_Links);
        return The_Links;

    exception
        when others =>
            return Utilities.Bad_Objects;

    end Links_For;

    function Internal_Links_For (This_World : in World; Used_Only : in Boolean)
                                return Internal_Links is

        Links : Link_Tools.Link_Iterator;

        The_Links : Objects := Directory_Tools.Object.Create;

        Dummy : Boolean;

    begin
        if not Any.Is_World (This_World) then
            return Utilities.Bad_Objects;
        end if;
        Link_Tools.Init
           (Links, World => Directory_Tools.Naming.Full_Name (This_World));
        while not Link_Tools.Done (Links) loop
            if Link_Tools.Kind (Links) = Link_Tools.Internal then
                declare
                    The_Link : Link := Directory_Tools.Naming.Resolution
                                          (Link_Tools.Source (Links));
                begin
                    if Used_Only then
                        if Object_Info.Links.Is_Used
                              (The_Link, In_World => This_World) then
                            Directory_Tools.Object.Add
                               (The_Links, The_Link, Dummy);
                        end if;
                    else
                        Directory_Tools.Object.Add (The_Links, The_Link, Dummy);
                    end if;  
                end;  
            end if;
            Link_Tools.Next (Links);
        end loop;  
        Directory_Tools.Object.Reset (The_Links);
        return The_Links;

    exception
        when others =>
            return Utilities.Bad_Objects;

    end Internal_Links_For;

    function External_Links_For (This_World : in World; Used_Only : in Boolean)
                                return External_Links is

        Links : Link_Tools.Link_Iterator;

        The_Links : Objects := Directory_Tools.Object.Create;

        Dummy : Boolean;

    begin
        if not Any.Is_World (This_World) then
            return Utilities.Bad_Objects;
        end if;
        Link_Tools.Init
           (Links, World => Directory_Tools.Naming.Full_Name (This_World));
        while not Link_Tools.Done (Links) loop
            if Link_Tools.Kind (Links) = Link_Tools.External then
                declare
                    The_Link : Link := Directory_Tools.Naming.Resolution
                                          (Link_Tools.Source (Links));
                begin
                    if Used_Only then
                        if Object_Info.Links.Is_Used
                              (The_Link, In_World => This_World) then
                            Directory_Tools.Object.Add
                               (The_Links, The_Link, Dummy);
                        end if;
                    else
                        Directory_Tools.Object.Add (The_Links, The_Link, Dummy);
                    end if;  
                end;
            end if;
            Link_Tools.Next (Links);
        end loop;  
        Directory_Tools.Object.Reset (The_Links);
        return The_Links;

    exception
        when others =>
            return Utilities.Bad_Objects;

    end External_Links_For;

    function Imported_External_Links_For
                (This_View : in View; Used_Only : in Boolean)
                return Imported_External_Links is

        All_External_Links : External_Links :=
           Object_Info.Links.External_Links_For (This_View, Used_Only);
    begin
        [statement]
    exception
        when others =>
            return Utilities.Bad_Objects;

    end Imported_External_Links_For;

    function Non_Imported_External_Links_For
                (This_View : in View; Used_Only : in Boolean)
                return Non_Imported_External_Links is

        All_External_Links : External_Links :=
           Object_Info.Links.External_Links_For (This_View, Used_Only);
    begin
        [statement]
    exception
        when others =>
            return Utilities.Bad_Objects;

    end Non_Imported_External_Links_For;

    function Is_Used (This_Link : in Link; In_World : in World)
                     return Boolean is
    begin  
        if not Any.Is_World (In_World) then
            return False;
        end if;
        return not Link_Tools.Done
                      (Link_Tools.Dependents
                          (Source => Directory_Tools.Naming.Full_Name
                                        (This_Link),
                           World  => Directory_Tools.Naming.Full_Name
                                        (In_World)));
    end Is_Used;

    function Conversion_Of (This_Dependent : in Diana.Tree) return Ada_Unit is
    begin
        return Directory_Tools.Object.Low_Level.Make_Handle
                  (The_Error       => Directory_Tools.Object.Nil,
                   The_Name        => String_Table.Nil,
                   The_Declaration => This_Dependent);
    end Conversion_Of;

    function Dependencies_On
                (This_Link : in Link; In_World : in World) return Ada_Units is

        Dependents : Link_Tools.Dependent_Iterator;

        The_Dependents : Objects := Directory_Tools.Object.Create;

        Dummy : Boolean;

    begin  
        if not Any.Is_World (In_World) then
            return The_Dependents;
        end if;
        Dependents :=
           Link_Tools.Dependents
              (Source => Directory_Tools.Naming.Full_Name (This_Link),
               World  => Directory_Tools.Naming.Full_Name (In_World));
        while not Link_Tools.Done (Dependents) loop
            declare
                The_Dependent : Ada_Unit := Object_Info.Links.Conversion_Of
                                               (Link_Tools.Value (Dependents));
            begin
                if not Directory_Tools.Object.Has
                          (The_Dependents, The_Dependent) then
                    Directory_Tools.Object.Add
                       (The_Dependents, The_Dependent, Dummy);  
                end if;
            end;
            Link_Tools.Next (Dependents);
        end loop;  
        Directory_Tools.Object.Reset (The_Dependents);
        return The_Dependents;

    exception
        when others =>
            return Utilities.Bad_Objects;

    end Dependencies_On;

    function Links_Derived_From
                (This_Import : in Import;
                 Into_View   : in View;
                 Used_Only   : in Boolean) return Imported_External_Links is
    begin
        [statement]
    exception
        when others =>
            return Utilities.Bad_Objects;

    end Links_Derived_From;

end Links;

E3 Meta Data

    nblk1=9
    nid=0
    hdr6=12
        [0x00] rec0=1e rec1=00 rec2=01 rec3=054
        [0x01] rec0=1f rec1=00 rec2=02 rec3=012
        [0x02] rec0=15 rec1=00 rec2=03 rec3=02c
        [0x03] rec0=1f rec1=00 rec2=04 rec3=090
        [0x04] rec0=1b rec1=00 rec2=05 rec3=050
        [0x05] rec0=20 rec1=00 rec2=06 rec3=044
        [0x06] rec0=1a rec1=00 rec2=07 rec3=04e
        [0x07] rec0=19 rec1=00 rec2=08 rec3=020
        [0x08] rec0=11 rec1=00 rec2=09 rec3=000
    tail 0x215003eb0815c65481524 0x42a00088462061e03