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

⟦192e48a20⟧ Ada Source

    Length: 8192 (0x2000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Trans, seg_0563d4

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 Text_Io;
with Byte_Defs;
with Utils;
with Message;
with Bal;  
with Identification;
with Transport;
with Transport_Defs;
with Orb_Tools;

package body Trans is

    Name_Of_Network : constant Transport_Defs.Network_Name := "TCP/IP";

    Orb_Host : constant Transport_Defs.Host_Id :=
       Transport.Local_Host (Name_Of_Network);

    Orb_Socket : constant Transport_Defs.Socket_Id := (10, 42);

    task Reception;

    task Emission;

    task body Reception is

        The_Mess : Message.Tmessage;
        The_Receive : Message.Data_String;
        From_Object : Byte_Defs.Byte_String (0 .. 255);

        Connec_Recep : Transport.Connection_Id;  
        Status_Recep : Transport_Defs.Status_Code;

        Cpt : Natural;  
        Try : Natural := 2;

    begin
        loop
            Transport.Open (Connec_Recep, Status_Recep,
                            Name_Of_Network, Orb_Socket);
            if Transport.Is_Open (Connec_Recep) then
                Text_Io.Put_Line ("Receiver : connexion is open...");
            else
                Text_Io.Put_Line ("Receiver : can't open connexion...");
                Try := Try - 1;
            end if;  
            exit when (Try = 0 or Transport.Is_Open (Connec_Recep));
        end loop;

        if Try = 0 and not Transport.Is_Open (Connec_Recep) then
            Text_Io.Put_Line ("Receiver : failed in opening connexion");
            exit;
        end if;

        loop
            Text_Io.Put_Line ("Receiver is waiting for a connexion ...");

            while not Transport.Is_Connected (Connec_Recep) loop

                Transport.Connect (Connec_Recep, Status_Recep);

            end loop;

            Text_Io.Put_Line ("Receiver : Someone is connected");

            loop

                Transport.Receive (Connec_Recep, Status_Recep,
                                   From_Object, Cpt);
                exit when Transport_Defs.Image (Status_Recep) = "OK";

            end loop;

            Text_Io.Put ("Receiver : Received data : ");

            Bounded_String.Copy
               (Target => The_Receive,
                Source => Utils.Byte_String_To_String (From_Object) (1 .. Cpt));

            Message.Unfill (Data => The_Receive, Mess => The_Mess);

            Text_Io.Put_Line (Bounded_String.Image (The_Receive));

            Bal.Put_Rm (The_Mess);

            Transport.Disconnect (Connec_Recep);

        end loop;

    end Reception;

    task body Emission is

        From_Orb : Bal.Tmess_To_Send;
        The_Mess : Message.Data_String;

        Connec_Emet : Transport.Connection_Id;  
        Status_Emet : Transport_Defs.Status_Code;

        Obj_Sock : Transport_Defs.Socket_Id (1 .. 2);
        Obj_Host : Transport_Defs.Host_Id (1 .. 4);

        Cpt : Natural;  
        Try : Positive := 2;

    begin
        loop
            Transport.Open (Connec_Emet, Status_Emet, Name_Of_Network);
            if Transport.Is_Open (Connec_Emet) then
                Text_Io.Put_Line ("Transmiter : connexion is open...");
            else
                Text_Io.Put_Line ("Transmiter : can't open connexion...");
                Try := Try - 1;
            end if;  
            exit when (Try = 0 or Transport.Is_Open (Connec_Emet));
        end loop;

        if Try = 0 and not Transport.Is_Open (Connec_Emet) then
            Text_Io.Put_Line ("Transmiter :  failed in opening connexion");
            exit;
        end if;

        loop
            while Bal.Is_Empty_Mts loop
                delay (1.0);
            end loop;

            Bal.Get_Mts (From_Orb);

            Message.Fill (The_Mess, From_Orb.Mess);

            Text_Io.Put_Line
               ("Transmiter : try to contact the object located at (" &
                Orb_Tools.Image (From_Orb.Des.Sock) & ") ...");

            Orb_Tools.Vstring_To_Host (From_Orb.Des.Host, Obj_Host);
            Orb_Tools.Vstring_To_Socket (From_Orb.Des.Sock, Obj_Sock);

            while not Transport.Is_Connected (Connec_Emet) loop

                Transport.Connect (Connec_Emet, Status_Emet,
                                   Obj_Host, Obj_Sock, 1.0);
            end loop;

            Message.Fill (Data => The_Mess, Mess => From_Orb.Mess);

            Text_Io.Put_Line ("Transmiter : object is connected...");

            Transport.Transmit
               (Connec_Emet, Status_Emet,
                Utils.String_To_Byte_String (Bounded_String.Image (The_Mess)),
                Cpt);

            Text_Io.Put_Line ("Transmiter : data transmited.");

            Transport.Disconnect (Connec_Emet);
        end loop;
    end Emission;

end Trans;

E3 Meta Data

    nblk1=7
    nid=4
    hdr6=c
        [0x00] rec0=29 rec1=00 rec2=01 rec3=046
        [0x01] rec0=05 rec1=00 rec2=07 rec3=00e
        [0x02] rec0=20 rec1=00 rec2=06 rec3=014
        [0x03] rec0=22 rec1=00 rec2=03 rec3=016
        [0x04] rec0=1d rec1=00 rec2=02 rec3=018
        [0x05] rec0=14 rec1=00 rec2=05 rec3=000
        [0x06] rec0=0f rec1=00 rec2=07 rec3=001
    tail 0x2176225da87c397c79aa4 0x42a00088462060003
Free Block Chain:
  0x4: 0000  00 00 00 04 80 01 20 01 02 03 04 05 06 07 20 20  ┆                ┆