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

⟦750fe993c⟧ Ada Source

    Length: 16384 (0x4000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Communication, seg_056a99

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 Utils;

package body Communication is

    Network : constant Transport_Defs.Network_Name := "TCP/IP";  
    Count : Natural;
    Sock : constant Transport_Defs.Socket_Id (1 .. 2) := (16#0A#, 16#2F#);

-- procedure qui extrait la socket et le host correspondant a la connection---------------------
    procedure Format_Entete (Connection : Transport.Connection_Id;
                             Socket : out Transport_Defs.Socket_Id;
                             Host : out Transport_Defs.Host_Id);

-- procedure qui extrait la socket et le host places en tete de trame----------------------------
    procedure Unformat_Entete (Trame : Byte_Defs.Byte_String;
                               Socket : out Transport_Defs.Socket_Id;
                               Host : out Transport_Defs.Host_Id);

    procedure Ouvrir_Orb (Connection : in out Transport.Connection_Id) is  
        Status : Transport_Defs.Status_Code;
    begin
        if not Transport.Is_Open (Connection) then
            Text_Io.Put ("ouverture reception : ");  
            Transport.Open (Connection, Status, Network, Sock);  
            Text_Io.Put_Line (Transport_Defs.Image (Status));
        else
            Text_Io.Put_Line ("connection deja ouverte");
        end if;  
    end Ouvrir_Orb;

    procedure Ouvrir_Autre (Connection : in out Transport.Connection_Id) is
        Status : Transport_Defs.Status_Code;
    begin  
        if not Transport.Is_Open (Connection) then
            Text_Io.Put ("ouverture emission : ");
            Transport.Open (Connection, Status, Network);
            Text_Io.Put_Line (Transport_Defs.Image (Status));
        else
            Text_Io.Put_Line ("connection deja ouverte");
        end if;  
    end Ouvrir_Autre;

    procedure Fermer (Connection : Transport.Connection_Id) is
    begin
        if Transport.Is_Open (Connection) then
            Text_Io.Put_Line ("fermeture connection");
            Transport.Close (Connection);
        else
            Text_Io.Put_Line ("connection deja fermee");
        end if;
    end Fermer;

    procedure Fermer_Orb (Connection : Transport.Connection_Id) is
    begin
        if Transport.Is_Open (Connection) then
            Text_Io.Put_Line ("fermeture connection");
            Transport.Close (Connection);  
        else
            Text_Io.Put_Line ("connection deja fermee");
        end if;
    end Fermer_Orb;

    procedure Reception (Trame : in out Byte_Defs.Byte_String;
                         Connection : Transport.Connection_Id) is  
        Status1 : Transport_Defs.Status_Code;
        Status2 : Transport_Defs.Status_Code;

    begin
        Text_Io.Put_Line (" reception en attente d'un message ");  
        Transport.Connect (Connection, Status1);
        Text_Io.Put_Line ("status connection reception : " &
                          Transport_Defs.Image (Status1));
        if Transport.Is_Connected (Connection) then
            Transport.Receive (Connection, Status2, Trame, Count);  
            Text_Io.Put_Line ("status reception : " &
                              Transport_Defs.Image (Status2));  
            Transport.Disconnect (Connection);
            Text_Io.Put_Line ("reception deconnectee");
        else
            Text_Io.Put_Line ("message non recu car echec de connection");
        end if;
        Text_Io.Put_Line ("fin reception");  
    end Reception;

    procedure Reception_Orb (Data : in out Byte_Defs.Byte_String;
                             Connection : Transport.Connection_Id;
                             Socket : out Transport_Defs.Socket_Id;
                             Host : out Transport_Defs.Host_Id) is
        Status1 : Transport_Defs.Status_Code;
        Status2 : Transport_Defs.Status_Code;
    begin
        Text_Io.Put_Line (" reception en attente d'un message ");  
        Transport.Connect (Connection, Status1);
        Text_Io.Put_Line ("status connection reception : " &
                          Transport_Defs.Image (Status1));
        if Transport.Is_Connected (Connection) then
            Transport.Receive (Connection, Status2, Data, Count);  
            Text_Io.Put_Line ("status reception : " &
                              Transport_Defs.Image (Status2));
            Unformat_Entete (Data, Socket, Host);
            Transport.Disconnect (Connection);
            Text_Io.Put_Line ("reception deconnectee");
        else
            Text_Io.Put_Line ("message non recu car echec de connection");
        end if;
        Text_Io.Put_Line ("fin reception");
    end Reception_Orb;

    procedure Emission (Trame : Byte_Defs.Byte_String;
                        Connection_Emission : Transport.Connection_Id;
                        Connection_Reception : Transport.Connection_Id) is
        Rhost : Transport_Defs.Host_Id (1 .. 4) := (193, 54, 146, 132);  
        Status1 : Transport_Defs.Status_Code;
        Status2 : Transport_Defs.Status_Code;
        Socket : Transport_Defs.Socket_Id (1 .. 2);
        Host : Transport_Defs.Host_Id (1 .. 4);
        use Byte_Defs;
    begin  
        Format_Entete (Connection_Reception, Socket, Host);
        Text_Io.Put_Line ("debut emission");
        Text_Io.Put_Line
           ("en attente de connection vers l'orb, veuillez patienter, ceci prend un certain temps");
        while not (Transport.Is_Connected (Connection_Emission)) loop
            Transport.Connect (Connection_Emission, Status1, Rhost, Sock);  
        end loop;
        if Transport.Is_Connected (Connection_Emission) then
            Text_Io.Put_Line ("status connection emission : " &
                              Transport_Defs.Image (Status1));  
            Transport.Transmit (Connection_Emission, Status2,
                                Byte_Defs.Byte_String (Socket) &
                                   Byte_Defs.Byte_String (Host) & Trame, Count);  
            Text_Io.Put_Line ("status transmission : " &
                              Transport_Defs.Image (Status2));
            Text_Io.Put_Line ("message transmis : " &
                              Utils.Byte_String_To_String (Trame));
            Transport.Disconnect (Connection_Emission);
            Text_Io.Put_Line ("emission deconnectee");
        else
            Text_Io.Put_Line ("message non transmis car echec de connection");
            Transport.Disconnect (Connection_Emission);
        end if;
        Text_Io.Put_Line ("fin emission");
    end Emission;

    procedure Emission_Orb (Trame : Byte_Defs.Byte_String;
                            Connection : Transport.Connection_Id;
                            Socket : Transport_Defs.Socket_Id;
                            Host : Transport_Defs.Host_Id) is
        --Rhost : Transport_Defs.Host_Id (1 .. 4) := (193, 54, 146, 133);
        Status1 : Transport_Defs.Status_Code;
        Status2 : Transport_Defs.Status_Code;
        use Byte_Defs;
    begin  
        Text_Io.Put_Line ("debut emission");
        Text_Io.Put_Line ("socket avant emission orb: " &
                          Utils.Byte_String_To_String (Byte_Defs.Byte_String  
                                                          (Socket)));
        Text_Io.Put_Line ("host avant emission orb : " &
                          Utils.Byte_String_To_String
                             (Byte_Defs.Byte_String (Host)));
        Text_Io.Put_Line ("en attente de connection");
        while not (Transport.Is_Connected (Connection)) loop
            Transport.Connect (Connection, Status1, Host, Socket);  
        end loop;
        if Transport.Is_Connected (Connection) then
            Text_Io.Put_Line ("status connection emission : " &
                              Transport_Defs.Image (Status1));  
            Transport.Transmit (Connection, Status2,
                                Byte_Defs.Byte_String (Socket) &
                                   Byte_Defs.Byte_String (Host) & Trame, Count);  
            Text_Io.Put_Line ("status transmission : " &
                              Transport_Defs.Image (Status2));
            Text_Io.Put_Line ("message transmis : " &
                              Utils.Byte_String_To_String (Trame));
            Transport.Disconnect (Connection);
            Text_Io.Put_Line ("emission deconnectee");
        else
            Text_Io.Put_Line ("message non transmis car echec de connection");
            Transport.Disconnect (Connection);
        end if;
        Text_Io.Put_Line ("fin emission");
    end Emission_Orb;


    procedure Format_Entete (Connection : Transport.Connection_Id;
                             Socket : out Transport_Defs.Socket_Id;
                             Host : out Transport_Defs.Host_Id) is
    begin
        Socket := (Transport.Local_Socket (Connection));
        Host := (Transport.Local_Host (Connection));
    end Format_Entete;

    procedure Unformat_Entete (Trame : Byte_Defs.Byte_String;
                               Socket : out Transport_Defs.Socket_Id;
                               Host : out Transport_Defs.Host_Id) is
    begin
        Socket := Transport_Defs.Socket_Id (Trame (1 .. 2));
        Host := Transport_Defs.Host_Id (Trame (3 .. 6));
    end Unformat_Entete;

end Communication;

E3 Meta Data

    nblk1=f
    nid=b
    hdr6=16
        [0x00] rec0=18 rec1=00 rec2=01 rec3=02c
        [0x01] rec0=19 rec1=00 rec2=0d rec3=008
        [0x02] rec0=1a rec1=00 rec2=05 rec3=02e
        [0x03] rec0=14 rec1=00 rec2=0f rec3=060
        [0x04] rec0=14 rec1=00 rec2=04 rec3=02c
        [0x05] rec0=01 rec1=00 rec2=02 rec3=018
        [0x06] rec0=12 rec1=00 rec2=03 rec3=020
        [0x07] rec0=13 rec1=00 rec2=0e rec3=05a
        [0x08] rec0=13 rec1=00 rec2=0c rec3=026
        [0x09] rec0=15 rec1=00 rec2=09 rec3=02c
        [0x0a] rec0=0b rec1=00 rec2=0a rec3=000
        [0x0b] rec0=0e rec1=00 rec2=0c rec3=000
        [0x0c] rec0=14 rec1=00 rec2=0d rec3=046
        [0x0d] rec0=15 rec1=00 rec2=0e rec3=044
        [0x0e] rec0=16 rec1=00 rec2=0f rec3=000
    tail 0x2176306e887c49ada242d 0x42a00088462060003
Free Block Chain:
  0xb: 0000  00 06 00 17 80 14 74 5f 4c 69 6e 65 20 28 22 73  ┆      t_Line ("s┆
  0x6: 0000  00 08 00 04 80 01 43 01 02 03 04 05 06 07 08 09  ┆      C         ┆
  0x8: 0000  00 07 03 fc 80 1c 20 55 74 69 6c 73 2e 42 79 74  ┆       Utils.Byt┆
  0x7: 0000  00 00 03 fc 80 2f 20 20 20 20 20 20 54 65 78 74  ┆     /      Text┆