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

⟦7b7fdc7a7⟧ Ada Source

    Length: 15360 (0x3c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Orb_Communication, seg_057d53

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 Bounded_String;
with Byte_String_Io;
with Message_Storage;
with Text_Io;
with Transport_Defs;


package body Orb_Communication is

    Source_Id : T_Id;
    package Bs renames Bounded_String;
    package Ti renames Text_Io;

    Packet : V_Packet;



    function Send (Msg_Rec : Messages.Obj_Msg;
                   Rem_Host : T_Host_Id := Ficus;
                   Rem_Socket : T_Socket := Orb_Socket) return Boolean is
        Ok : Boolean;
    begin
        Messages.Packaging (Typ => Messages.Get_Type_Msg (Msg_Rec),
                            Content => Messages.Get_Content (Msg_Rec),
                            Source => Messages.Get_Source_Id (Msg_Rec),
                            Target => Messages.Get_Target_Id (Msg_Rec),
                            Order => Messages.Get_Order_Msg (Msg_Rec),
                            Pack => Packet);
        Communication.Open_Connection (Channel_In);
        Communication.Send (C => Channel_In,
                            V_Msg => Packet,
                            R_Host => Rem_Host,
                            R_Socket => Rem_Socket,
                            Try_Nb => 1,
                            Delaymax => Delay_Max,
                            Success => Ok);
        Communication.Close_Connection (Channel_In);
        return Ok;
    end Send;

    task Client is
        entry Send (Msg_Rec : Messages.Obj_Msg;
                    Rem_Host : T_Host_Id := Ficus;
                    Rem_Socket : T_Socket := Orb_Socket);
    end Client;
    task Reception;

    task body Client is
        Success : Boolean;
        Ok : Boolean;
    begin
        loop
            select
                accept Send (Msg_Rec : Messages.Obj_Msg;
                             Rem_Host : T_Host_Id := Ficus;
                             Rem_Socket : T_Socket := Orb_Socket) do

                    Messages.Packaging
                       (Typ => Messages.Get_Type_Msg (Msg_Rec),
                        Content => Messages.Get_Content (Msg_Rec),
                        Source => Messages.Get_Source_Id (Msg_Rec),
                        Target => Messages.Get_Target_Id (Msg_Rec),
                        Order => Messages.Get_Order_Msg (Msg_Rec),
                        Pack => Packet);
                    Communication.Open_Connection (Channel_In);
                    Communication.Send (C => Channel_In,
                                        V_Msg => Packet,
                                        R_Host => Rem_Host,
                                        R_Socket => Rem_Socket,
                                        Try_Nb => 1,
                                        Delaymax => Delay_Max,
                                        Success => Ok);
                    Communication.Close_Connection (Channel_In);  
                end Send;
            end select;
        end loop;
    end Client;

    task body Reception is
        Rec : Messages.Obj_Msg;
        Packet : V_Packet;  
        Byte_Msg : Byte_String_Io.Byte_String (0 .. Pmax - 1);
        Counter : Natural;  
        Rec_Msg : Messages.Obj_Msg;
    begin

        Attente_Message:
            loop  
                Communication.Orb_Open_Connection
                   (Channel_Out, Transport_Defs.Socket_Id (Orb_Socket));
                Communication.Reception (Delaymax => Delay_Max,
                                         Msg => Byte_Msg,
                                         Count => Counter,
                                         C => Channel_Out);
                Communication.Close_Connection (Channel_Out);
                if Counter > 0 then
                    Messages.Unpackaging (Byte_Msg, Counter, Rec_Msg);
                    Orb_Bal.Put_Message (Rec_Msg);
                else
                    Text_Io.Put_Line ("reception 0 bytes");
                end if;
            end loop Attente_Message;

    end Reception;


end Orb_Communication;

E3 Meta Data

    nblk1=e
    nid=c
    hdr6=a
        [0x00] rec0=1f rec1=00 rec2=01 rec3=058
        [0x01] rec0=1d rec1=00 rec2=02 rec3=04e
        [0x02] rec0=14 rec1=00 rec2=0d rec3=01e
        [0x03] rec0=17 rec1=00 rec2=0b rec3=034
        [0x04] rec0=06 rec1=00 rec2=0a rec3=000
        [0x05] rec0=12 rec1=00 rec2=0c rec3=000
        [0x06] rec0=10 rec1=00 rec2=05 rec3=050
        [0x07] rec0=10 rec1=00 rec2=04 rec3=06c
        [0x08] rec0=10 rec1=00 rec2=03 rec3=036
        [0x09] rec0=0f rec1=00 rec2=02 rec3=016
        [0x0a] rec0=16 rec1=00 rec2=0b rec3=04e
        [0x0b] rec0=14 rec1=00 rec2=0c rec3=034
        [0x0c] rec0=0a rec1=00 rec2=0d rec3=000
        [0x0d] rec0=00 rec1=00 rec2=00 rec3=000
    tail 0x217651c6e87d2807c867a 0x42a00088462060003
Free Block Chain:
  0xc: 0000  00 03 00 40 80 06 73 73 61 67 65 3b 06 00 00 00  ┆   @  ssage;    ┆
  0x3: 0000  00 04 00 33 80 12 6e 65 20 28 22 66 69 6c 74 72  ┆   3  ne ("filtr┆
  0x4: 0000  00 05 00 2c 80 21 20 20 20 20 20 20 20 20 20 20  ┆   , !          ┆
  0x5: 0000  00 06 00 38 80 08 3d 20 46 69 63 75 73 3b 08 00  ┆   8  = Ficus;  ┆
  0x6: 0000  00 07 00 3d 80 2c 62 6c 69 63 61 74 69 6f 6e 2c  ┆   = ,blication,┆
  0x7: 0000  00 08 00 4f 80 28 20 20 20 20 20 20 20 20 20 20  ┆   O (          ┆
  0x8: 0000  00 09 00 12 80 0f 20 53 6f 75 72 63 65 20 3a 20  ┆       Source : ┆
  0x9: 0000  00 0e 00 27 80 24 20 53 65 6e 64 20 28 51 75 65  ┆   ' $ Send (Que┆
  0xe: 0000  00 00 01 8a 80 47 20 20 20 20 20 20 20 20 20 20  ┆     G          ┆