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

⟦5c9bb959d⟧ Ada Source

    Length: 26624 (0x6800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Record_Tables, seg_055c9d

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



with Text_Io;
with Bounded_String;
with List_Generic;
with String_Map_Generic;

package body Record_Tables is

    type Record_Object is
        record
            Subscription : Boolean;
            Subscript_Identifier : My_Message.My_String;
            Filtration : Boolean;
            Filter_Identifier : My_Message.My_String;
        end record;


    package My_List is new List_Generic (Element => My_Message.My_String);

    type List_Object is
        record
            List_Of_Servers : My_List.List;
            List_Of_Filters : My_List.List;
            List_Of_Subscripts : My_List.List;
        end record;

    package My_Hash_List is new String_Map_Generic
                                   (Size => 1000, Range_Type => List_Object);
    Recorded_Services_Map : My_Hash_List.Map;

    package My_Hash_Record is
       new String_Map_Generic (Size => 1000, Range_Type => Record_Object);
    Identifiers_Map : My_Hash_Record.Map;

    --------------------------------------------------------------------------

    procedure Initialize_Data_Structures is
    begin
        My_Hash_List.Initialize (Recorded_Services_Map);
        My_Hash_Record.Initialize (Identifiers_Map);
    end Initialize_Data_Structures;


    function Client_Is_Registrate
                (Message : My_Message.Object) return Boolean is  
        Success : Boolean;
        Range_Type : Record_Object;
    begin
        My_Hash_Record.Find
           (The_Map => Identifiers_Map,
            D => Bounded_String.Image
                    (My_Message.Get_Local_Identifier (Message)),
            R => Range_Type,
            Success => Success);
        return Success;
    end Client_Is_Registrate;


    procedure Fill_In (Message : My_Message.Object) is
        Range_Type : Record_Object;
    begin  
        My_Hash_Record.Define
           (The_Map => Identifiers_Map,
            D => Bounded_String.Image
                    (My_Message.Get_Local_Identifier (Message)),
            R => Range_Type);
    end Fill_In;


    procedure Delete (Message : My_Message.Object) is
    begin
        My_Hash_Record.Undefine
           (The_Map => Identifiers_Map,
            D => Bounded_String.Image
                    (My_Message.Get_Local_Identifier (Message)));
    end Delete;


    function Request_Exists (Message : My_Message.Object) return Boolean is
        Success : Boolean;
        The_List_Object : List_Object;
    begin
        My_Hash_List.Find (The_Map => Recorded_Services_Map,
                           D => Bounded_String.Image
                                   (My_Message.Get_Content (Message)),
                           R => The_List_Object,
                           Success => Success);
        return Success;
    end Request_Exists;


    function Extract_Rem_Id_For_Request
                (Message : My_Message.Object) return My_Message.My_String is
        The_List_Object : List_Object;
        My_Iter : My_List.Iterator;
        Success : Boolean;
        Range_Type : Record_Object;
    begin
        My_Hash_List.Find (The_Map => Recorded_Services_Map,
                           D => Bounded_String.Image
                                   (My_Message.Get_Content (Message)),
                           R => The_List_Object,
                           Success => Success);
        My_List.Init (My_Iter, The_List_Object.List_Of_Servers);

        while not My_List.Done (My_Iter) loop
            My_Hash_Record.Find
               (The_Map => Identifiers_Map,
                D => Bounded_String.Image
                        (My_Message.Get_Local_Identifier (Message)),
                R => Range_Type,
                Success => Success);
            if (Success = True) then
                return My_List.Value (My_Iter);
            else
                My_List.Next (My_Iter);
            end if;
        end loop;
    end Extract_Rem_Id_For_Request;


    function Extract_Rem_Id_For_Reply
                (Message : My_Message.Object) return My_Message.My_String is  
    begin
        return My_Message.Get_Local_Identifier (Message);
    end Extract_Rem_Id_For_Reply;


    procedure Send_To_All (Message : My_Message.Object) is  
        My_Iter : My_Hash_Record.Iterator;
        Rem_Id : My_Message.My_String;
        New_Message : My_Message.Object :=
           My_Message.Initialize
              (Op => My_Message.Notification,
               Cont => My_Message.Get_Content (Message),
               L_I => My_Message.Get_Local_Identifier (Message),
               Req_I => My_Message.Get_Request_Identifier (Message));
    begin
        My_Hash_Record.Init (My_Iter, Identifiers_Map);
        while not (My_Hash_Record.Done (My_Iter)) loop
            Bounded_String.Copy (Rem_Id, My_Hash_Record.Value (My_Iter));
            My_Message.Send (New_Message, Rem_Id);
            My_Hash_Record.Next (My_Iter);
        end loop;
    end Send_To_All;


    procedure Record_Of_Publication (Message : My_Message.Object) is
        The_List_Object : List_Object;
        Success : Boolean;
    begin
        My_Hash_List.Find (The_Map => Recorded_Services_Map,
                           D => Bounded_String.Image
                                   (My_Message.Get_Content (Message)),
                           R => The_List_Object,
                           Success => Success);
        The_List_Object.List_Of_Servers :=
           My_List.Make (My_Message.Get_Local_Identifier (Message),
                         The_List_Object.List_Of_Servers);
        My_Hash_List.Define (The_Map => Recorded_Services_Map,
                             D => Bounded_String.Image
                                     (My_Message.Get_Content (Message)),
                             R => The_List_Object);
    end Record_Of_Publication;


    procedure Record_Of_Publication_Filter (Message : My_Message.Object) is
        The_List_Object : List_Object;
        Success : Boolean;
    begin
        My_Hash_List.Find (The_Map => Recorded_Services_Map,
                           D => Bounded_String.Image
                                   (My_Message.Get_Content (Message)),
                           R => The_List_Object,
                           Success => Success);
        The_List_Object.List_Of_Filters :=
           My_List.Make (My_Message.Get_Local_Identifier (Message),
                         The_List_Object.List_Of_Filters);
        My_Hash_List.Define (The_Map => Recorded_Services_Map,
                             D => Bounded_String.Image
                                     (My_Message.Get_Content (Message)),
                             R => The_List_Object);
    end Record_Of_Publication_Filter;



    procedure Unrecord_Of_Publication (Message : My_Message.Object) is
        The_List_Object : List_Object;
        New_List : My_List.List;
        My_Iter : My_List.Iterator;
    begin
        The_List_Object := My_Hash_List.Eval
                              (The_Map => Recorded_Services_Map,
                               D => Bounded_String.Image
                                       (My_Message.Get_Content (Message)));
        My_List.Init (My_Iter, The_List_Object.List_Of_Servers);
        while not (My_List.Done (My_Iter)) loop
            if (Bounded_String.Image (My_List.Value (My_Iter)) =
                Bounded_String.Image
                   (My_Message.Get_Local_Identifier (Message))) then
                null;
            else
                New_List := My_List.Make (My_List.Value (My_Iter), New_List);
            end if;  
            My_List.Next (My_Iter);
        end loop;  
        The_List_Object.List_Of_Servers := New_List;
        My_List.Free (New_List);

        if My_List.Is_Empty (The_List_Object.List_Of_Servers) then
            My_Hash_List.Undefine (The_Map => Recorded_Services_Map,
                                   D => Bounded_String.Image
                                           (My_Message.Get_Content (Message)));
        else
            My_Hash_List.Define (The_Map => Recorded_Services_Map,
                                 D => Bounded_String.Image
                                         (My_Message.Get_Content (Message)),
                                 R => The_List_Object);
        end if;
    end Unrecord_Of_Publication;


    procedure Unrecord_Of_Publication_Filter (Message : My_Message.Object) is
        The_List_Object : List_Object;
        New_List : My_List.List;
        My_Iter : My_List.Iterator;
    begin
        The_List_Object := My_Hash_List.Eval
                              (The_Map => Recorded_Services_Map,
                               D => Bounded_String.Image
                                       (My_Message.Get_Content (Message)));
        My_List.Init (My_Iter, The_List_Object.List_Of_Filters);
        while not (My_List.Done (My_Iter)) loop
            if (Bounded_String.Image (My_List.Value (My_Iter)) =
                Bounded_String.Image
                   (My_Message.Get_Local_Identifier (Message))) then
                null;
            else
                New_List := My_List.Make (My_List.Value (My_Iter), New_List);
            end if;  
            My_List.Next (My_Iter);
        end loop;  
        The_List_Object.List_Of_Filters := New_List;
        My_List.Free (New_List);

        if My_List.Is_Empty (The_List_Object.List_Of_Filters) then
            My_Hash_List.Undefine (The_Map => Recorded_Services_Map,
                                   D => Bounded_String.Image
                                           (My_Message.Get_Content (Message)));
        else
            My_Hash_List.Define (The_Map => Recorded_Services_Map,
                                 D => Bounded_String.Image
                                         (My_Message.Get_Content (Message)),
                                 R => The_List_Object);
        end if;
    end Unrecord_Of_Publication_Filter;


    procedure Set_Subscription (Message : My_Message.Object) is
        The_List_Object : List_Object;
        Success : Boolean;
    begin
        My_Hash_List.Find (The_Map => Recorded_Services_Map,
                           D => Bounded_String.Image
                                   (My_Message.Get_Content (Message)),
                           R => The_List_Object,
                           Success => Success);
        The_List_Object.List_Of_Subscripts :=
           My_List.Make (My_Message.Get_Local_Identifier (Message),
                         The_List_Object.List_Of_Subscripts);
        My_Hash_List.Define (The_Map => Recorded_Services_Map,
                             D => Bounded_String.Image
                                     (My_Message.Get_Content (Message)),
                             R => The_List_Object);
    end Set_Subscription;


    procedure Reset_Subscription (Message : My_Message.Object) is  
        The_List_Object : List_Object;
        New_List : My_List.List;
        My_Iter : My_List.Iterator;
    begin
        The_List_Object := My_Hash_List.Eval
                              (The_Map => Recorded_Services_Map,
                               D => Bounded_String.Image
                                       (My_Message.Get_Content (Message)));
        My_List.Init (My_Iter, The_List_Object.List_Of_Subscripts);
        while not (My_List.Done (My_Iter)) loop
            if (Bounded_String.Image (My_List.Value (My_Iter)) =
                Bounded_String.Image
                   (My_Message.Get_Local_Identifier (Message))) then
                null;
            else
                New_List := My_List.Make (My_List.Value (My_Iter), New_List);
            end if;  
            My_List.Next (My_Iter);
        end loop;  
        The_List_Object.List_Of_Subscripts := New_List;
        My_List.Free (New_List);

        if My_List.Is_Empty (The_List_Object.List_Of_Subscripts) then
            My_Hash_List.Undefine (The_Map => Recorded_Services_Map,
                                   D => Bounded_String.Image
                                           (My_Message.Get_Content (Message)));
        else
            My_Hash_List.Define (The_Map => Recorded_Services_Map,
                                 D => Bounded_String.Image
                                         (My_Message.Get_Content (Message)),
                                 R => The_List_Object);
        end if;  
    end Reset_Subscription;


    procedure Set_Filter (Message : My_Message.Object) is
        The_List_Object : List_Object;
        Success : Boolean;
    begin
        My_Hash_List.Find (The_Map => Recorded_Services_Map,
                           D => Bounded_String.Image
                                   (My_Message.Get_Content (Message)),
                           R => The_List_Object,
                           Success => Success);
        The_List_Object.List_Of_Filters :=
           My_List.Make (My_Message.Get_Local_Identifier (Message),
                         The_List_Object.List_Of_Filters);
        My_Hash_List.Define (The_Map => Recorded_Services_Map,
                             D => Bounded_String.Image
                                     (My_Message.Get_Content (Message)),
                             R => The_List_Object);
    end Set_Filter;


    procedure Reset_Filter (Message : My_Message.Object) is
        The_List_Object : List_Object;
        New_List : My_List.List;
        My_Iter : My_List.Iterator;
    begin
        The_List_Object := My_Hash_List.Eval
                              (The_Map => Recorded_Services_Map,
                               D => Bounded_String.Image
                                       (My_Message.Get_Content (Message)));
        My_List.Init (My_Iter, The_List_Object.List_Of_Filters);
        while not (My_List.Done (My_Iter)) loop
            if (Bounded_String.Image (My_List.Value (My_Iter)) =
                Bounded_String.Image
                   (My_Message.Get_Local_Identifier (Message))) then
                null;
            else
                New_List := My_List.Make (My_List.Value (My_Iter), New_List);
            end if;
            My_List.Next (My_Iter);
        end loop;
        The_List_Object.List_Of_Filters := New_List;
        My_List.Free (New_List);

        if My_List.Is_Empty (The_List_Object.List_Of_Filters) then
            My_Hash_List.Undefine (The_Map => Recorded_Services_Map,
                                   D => Bounded_String.Image
                                           (My_Message.Get_Content (Message)));
        else
            My_Hash_List.Define (The_Map => Recorded_Services_Map,
                                 D => Bounded_String.Image
                                         (My_Message.Get_Content (Message)),
                                 R => The_List_Object);
        end if;
    end Reset_Filter;


    procedure Show_Content_And_Objects_Of_Orb (Message : My_Message.Object) is
        My_Iter_1 : My_Hash_Record.Iterator;
        My_Iter_2 : My_Hash_List.Iterator;
    begin  
        Text_Io.Put_Line ("Here is a list of the ORB's registrate objects : ");
        My_Hash_Record.Init (My_Iter_1, Identifiers_Map);
        while not (My_Hash_Record.Done (My_Iter_1)) loop
            Text_Io.Put_Line (My_Hash_Record.Value (My_Iter_1));
            My_Hash_Record.Next (My_Iter_1);
        end loop;

        Text_Io.Put_Line ("Here is a list of the ORB's possible requests : ");
        My_Hash_List.Init (My_Iter_2, Recorded_Services_Map);
        while not (My_Hash_List.Done (My_Iter_2)) loop
            Text_Io.Put_Line (My_Hash_List.Value (My_Iter_2));
            My_Hash_List.Next (My_Iter_2);
        end loop;
    end Show_Content_And_Objects_Of_Orb;


    procedure Reply_The_Content (Message : My_Message.Object) is
        My_Iter : My_Hash_List.Iterator;
        List_Of_Content : My_Message.My_String;
        New_Message : My_Message.Object;
        Rem_Id : My_Message.My_String;
    begin
        My_Hash_List.Init (My_Iter, Recorded_Services_Map);
        while not (My_Hash_List.Done (My_Iter)) loop
            Bounded_String.Append (List_Of_Content,
                                   My_Hash_List.Value (My_Iter) & ",");
            My_Hash_List.Next (My_Iter);
        end loop;
        New_Message :=
           My_Message.Initialize
              (Op => My_Message.Forward_Reply,
               Cont => List_Of_Content,
               L_I => My_Message.Get_Local_Identifier (Message),
               Req_I => My_Message.Get_Request_Identifier (Message));
        Bounded_String.Copy (Rem_Id, My_Message.Get_Local_Identifier (Message));
        My_Message.Send (New_Message, Rem_Id);
    end Reply_The_Content;

    procedure Reply (Message : My_Message.Object) is
        The_List_Object : List_Object;
        My_Iter : My_List.Iterator;  
        Rem_Id : My_Message.My_String;
        Success : Boolean;
        New_Message : My_Message.Object;
    begin
        My_Hash_List.Find (The_Map => Recorded_Services_Map,
                           D => Bounded_String.Image
                                   (My_Message.Get_Remote_Identifier (Message)),
                           R => The_List_Object,
                           Success => Success);

        if not (My_List.Is_Empty (The_List_Object.List_Of_Filters)) then
            New_Message :=
               My_Message.Initialize
                  (Op => My_Message.Forward_Filtration,
                   Cont => My_Message.Get_Content (Message),
                   L_I => My_Message.Get_Local_Identifier (Message),
                   Req_I => My_Message.Get_Request_Identifier (Message));

            My_List.Init (My_Iter, The_List_Object.List_Of_Filters);
            Bounded_String.Copy (Rem_Id, My_List.Value (My_Iter));
            My_Message.Send (New_Message, Rem_Id);  
        else  
            New_Message :=
               My_Message.Initialize
                  (Op => My_Message.Reply_Subscription,
                   Cont => My_Message.Get_Content (Message),
                   L_I => My_Message.Get_Local_Identifier (Message),
                   Req_I => My_Message.Get_Request_Identifier (Message));

            My_List.Init (My_Iter, The_List_Object.List_Of_Subscripts);
            while not My_List.Done (My_Iter) loop
                Bounded_String.Copy (Rem_Id, My_List.Value (My_Iter));
                My_Message.Send (New_Message, Rem_Id);
                My_List.Next (My_Iter);
            end loop;

            New_Message :=
               My_Message.Initialize
                  (Op => My_Message.Forward_Reply,
                   Cont => My_Message.Get_Content (Message),
                   L_I => My_Message.Get_Local_Identifier (Message),
                   Req_I => My_Message.Get_Request_Identifier (Message));
            My_Message.Send (New_Message,
                             My_Message.Get_Local_Identifier (Message));
        end if;  
    end Reply;


    procedure Reply_Filtration (Message : My_Message.Object) is
        The_List_Object : List_Object;
        My_Iter : My_List.Iterator;  
        Rem_Id : My_Message.My_String;
        Success : Boolean;
        New_Message : My_Message.Object :=
           My_Message.Initialize
              (Op => My_Message.Forward_Reply,
               Cont => My_Message.Get_Content (Message),
               L_I => My_Message.Get_Local_Identifier (Message),
               Req_I => My_Message.Get_Request_Identifier (Message),
               R_I => My_Message.Get_Remote_Identifier (Message));
    begin
        My_Hash_List.Find (The_Map => Recorded_Services_Map,
                           D => Bounded_String.Image
                                   (My_Message.Get_Remote_Identifier (Message)),
                           R => The_List_Object,
                           Success => Success);
        My_List.Init (My_Iter, The_List_Object.List_Of_Subscripts);
        while not My_List.Done (My_Iter) loop
            Bounded_String.Copy (Rem_Id, My_List.Value (My_Iter));
            My_Message.Send (New_Message, Rem_Id);
            My_List.Next (My_Iter);
        end loop;
        My_Message.Send (New_Message,
                         My_Message.Get_Local_Identifier (Message));
    end Reply_Filtration;


end Record_Tables;


E3 Meta Data

    nblk1=19
    nid=19
    hdr6=30
        [0x00] rec0=22 rec1=00 rec2=01 rec3=000
        [0x01] rec0=1f rec1=00 rec2=11 rec3=004
        [0x02] rec0=1c rec1=00 rec2=05 rec3=086
        [0x03] rec0=18 rec1=00 rec2=0f rec3=024
        [0x04] rec0=19 rec1=00 rec2=07 rec3=048
        [0x05] rec0=17 rec1=00 rec2=04 rec3=000
        [0x06] rec0=17 rec1=00 rec2=0b rec3=01a
        [0x07] rec0=00 rec1=00 rec2=17 rec3=022
        [0x08] rec0=17 rec1=00 rec2=06 rec3=00e
        [0x09] rec0=15 rec1=00 rec2=12 rec3=014
        [0x0a] rec0=15 rec1=00 rec2=16 rec3=006
        [0x0b] rec0=0d rec1=00 rec2=18 rec3=058
        [0x0c] rec0=15 rec1=00 rec2=0d rec3=05c
        [0x0d] rec0=15 rec1=00 rec2=03 rec3=03c
        [0x0e] rec0=15 rec1=00 rec2=10 rec3=05e
        [0x0f] rec0=18 rec1=00 rec2=09 rec3=05c
        [0x10] rec0=16 rec1=00 rec2=0c rec3=034
        [0x11] rec0=17 rec1=00 rec2=0a rec3=04e
        [0x12] rec0=17 rec1=00 rec2=0e rec3=006
        [0x13] rec0=13 rec1=00 rec2=14 rec3=044
        [0x14] rec0=17 rec1=00 rec2=02 rec3=022
        [0x15] rec0=06 rec1=00 rec2=15 rec3=020
        [0x16] rec0=12 rec1=00 rec2=13 rec3=084
        [0x17] rec0=06 rec1=00 rec2=08 rec3=000
        [0x18] rec0=06 rec1=00 rec2=08 rec3=000
    tail 0x2154d832c87c060c38015 0x42a00088462060003
Free Block Chain:
  0x19: 0000  00 00 00 08 80 05 4d 65 73 73 61 05 00 00 00 00  ┆      Messa     ┆