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

⟦7ecd612e0⟧ Ada Source

    Length: 22528 (0x5800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Communication, seg_0550b6

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 Transport;
with Text_Io;
with Transport_Defs;
with Utils;
with Byte_Defs;
with Our_Constantes;
use Our_Constantes;
with Message;
use Message;
with Our_String;

package body Communication is


    -- Creation de la connection
    -- =========================

    procedure Connection_Transmitter
                 (The_Message : in Message.Type_Of_Message;
                  The_Connection_Data : in out Connection_Data) is

    begin
        Transport.Open (The_Connection_Data.Connection,
                        The_Connection_Data.Status, "TCP/IP");
        if Transport.Is_Open (The_Connection_Data.Connection) then
            Text_Io.Put_Line ("connection ouverte OK");
        end if;

        while not (Transport.Is_Connected (The_Connection_Data.Connection)) loop
            Transport.Connect (The_Connection_Data.Connection,
                               The_Connection_Data.Status,
                               The_Message.The_Host_Machine_Receive,
                               The_Message.The_Socket_Receive, Duration'Last);
            Text_Io.Put_Line ("essai connection transmission");
        end loop;

        if Transport.Is_Connected (The_Connection_Data.Connection) then
            Text_Io.Put_Line ("Connection OK");
        end if;

    end Connection_Transmitter;


    -- Transmission du message
    -- =======================

    procedure Transmitter (The_Message : in Message.Type_Of_Message;
                           The_Connection_Data : in out Connection_Data) is

        String_Tempo : Our_String.Variable_String;


        procedure Transmit_String
                     (S : Our_String.Variable_String;
                      The_Connection_Data : in out Connection_Data) is

        begin
            Transport.Transmit (The_Connection_Data.Connection,
                                The_Connection_Data.Status,
                                Utils.String_To_Byte_String
                                   (Our_String.Image (S)),
                                The_Connection_Data.Count);
        end Transmit_String;

    begin

        Our_String.Copy (String_Tempo,
                         Type_Of_Command'Image (The_Message.The_Command));
        Our_String.Append (String_Tempo, "+++");
        Transmit_String (String_Tempo, The_Connection_Data);

        Transmit_String (Our_String.Value
                            (Utils.Byte_String_To_String
                                (Byte_Defs.Byte_String
                                    (The_Message.The_Host_Machine_Send))),
                         The_Connection_Data);

        Transmit_String (Our_String.Value
                            (Natural'Image (The_Message.The_Id_User_Send)),
                         The_Connection_Data);

        Transmit_String (Our_String.Value
                            (Utils.Byte_String_To_String
                                (Byte_Defs.Byte_String
                                    (The_Message.The_Host_Machine_Receive))),
                         The_Connection_Data);

        Transmit_String (Our_String.Value
                            (Natural'Image (The_Message.The_Id_User_Receive)),
                         The_Connection_Data);

        Transmit_String (Our_String.Value
                            (Utils.Byte_String_To_String
                                (Byte_Defs.Byte_String
                                    (The_Message.The_Host_Machine_To_Execute))),
                         The_Connection_Data);


        if (The_Message.Command_Is_Ok = True) then
            Transmit_String (Our_String.Value (Natural'Image (1)),
                             The_Connection_Data);
        else
            Transmit_String (Our_String.Value (Natural'Image (0)),
                             The_Connection_Data);
        end if;

        Transmit_String (Our_String.Value
                            (Natural'Image (The_Message.
                                            Number_Of_The_Question)),
                         The_Connection_Data);

        Transmit_String (Our_String.Value
                            (Utils.Byte_String_To_String
                                (Byte_Defs.Byte_String
                                    (The_Message.The_Socket_Send))),
                         The_Connection_Data);

        Transmit_String (Our_String.Value
                            (Utils.Byte_String_To_String
                                (Byte_Defs.Byte_String
                                    (The_Message.The_Socket_Receive))),
                         The_Connection_Data);

        Transmit_String (Our_String.Value
                            (Utils.Byte_String_To_String
                                (Byte_Defs.Byte_String
                                    (The_Message.The_Socket_To_Execute))),
                         The_Connection_Data);

        Our_String.Copy (String_Tempo, The_Message.Data);
        Our_String.Append (String_Tempo, "+++");
        Transmit_String (String_Tempo, The_Connection_Data);

    end Transmitter;

    procedure Disconnection (The_Connection_Data : in out Connection_Data) is

    begin
        Transport.Disconnect (The_Connection_Data.Connection);
        Transport.Close (The_Connection_Data.Connection);  
        Text_Io.Put_Line ("connection fermee");
    end Disconnection;




    -- etablissement de la connection
    -- ==============================

    procedure Connection_Receiver
                 (The_Socket : in Transport_Defs.Socket_Id;
                  The_Connection_Data : in out Connection_Data) is

    begin

        Transport.Open (The_Connection_Data.Connection,
                        The_Connection_Data.Status, "TCP/IP", The_Socket);
        if Transport.Is_Open (The_Connection_Data.Connection) then
            Text_Io.Put_Line ("connection ouverte OK");
        end if;

        while not (Transport.Is_Connected (The_Connection_Data.Connection)) loop
            Transport.Connect (The_Connection_Data.Connection,
                               The_Connection_Data.Status, Duration'Last);
            Text_Io.Put_Line ("essai connection reception");
        end loop;

        if Transport.Is_Connected (The_Connection_Data.Connection) then
            Text_Io.Put_Line ("Connection OK");
        end if;

    end Connection_Receiver;


    -- reception
    -- =========

    procedure Receiver (The_Message : out Message.Type_Of_Message;
                        The_Connection_Data : in out Connection_Data) is

        Data : Byte_Defs.Byte_String (1 .. 255);
        I : Positive := 1;
        Data_One : Byte_Defs.Byte_String (1 .. 2);
        Data_Four : Byte_Defs.Byte_String (1 .. 4);
        String_Tempo : Our_String.Variable_String;
        End_Of_Data : Boolean := False;
        Last : Positive;

    begin
        -- The_Message.The_Command
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data,
                           The_Connection_Data.Count);
        String_Tempo := Our_String.Value (Utils.Byte_String_To_String (Data));
        End_Of_Data := False;
        I := 1;
        while not End_Of_Data and I /= Our_Constantes.Length_Of_A_Line loop
            if (Our_String.Char_At (String_Tempo, I) = '+') then
                if (Our_String.Char_At (String_Tempo, I) = '+') then
                    if (Our_String.Char_At (String_Tempo, I) = '+') then
                        String_Tempo := Our_String.Value
                                           (Utils.Byte_String_To_String (Data));
                        Our_String.Set_Length (String_Tempo, I - 1);
                        End_Of_Data := True;
                    else
                        I := I + 1;
                    end if;
                else
                    I := I + 1;
                end if;
            else
                I := I + 1;
            end if;
        end loop;
        Text_Io.Put (" The_Message.The_Command ");
        Text_Io.Put_Line (Our_String.Image (String_Tempo));
        Our_Enumeration.Get (Our_String.Image (String_Tempo),
                             The_Message.The_Command, Last);


        -- The_Message.The_Socket_Machine_Send
        Text_Io.Put_Line ("");
        Text_Io.Put (" The_Message.The_Id_Machine_Send ");
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data_Four,
                           The_Connection_Data.Count);
        The_Message.The_Host_Machine_Send := Transport_Defs.Host_Id (Data_Four);
        Text_Io.Put_Line (Utils.Byte_String_To_String (Data_Four));


        -- The_Message.The_Id_User_Send
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data_One,
                           The_Connection_Data.Count);
        The_Message.The_Id_User_Send :=
           Natural'Value (Utils.Byte_String_To_String (Data_One));
        Text_Io.Put_Line ("");
        Text_Io.Put (" The_Message.The_Id_User_Send ");
        Text_Io.Put_Line (Utils.Byte_String_To_String (Data_One));


        -- The_Message.The_Host_Machine_Receive
        Text_Io.Put_Line ("");
        Text_Io.Put (" The_Message.The_Id_Machine_Receive ");
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data_Four,
                           The_Connection_Data.Count);
        The_Message.The_Host_Machine_Receive :=
           Transport_Defs.Host_Id (Data_Four);
        Text_Io.Put_Line (Utils.Byte_String_To_String (Data_Four));


        -- The_Message.The_Id_User_Receive
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data_One,
                           The_Connection_Data.Count);
        The_Message.The_Id_User_Receive :=
           Natural'Value (Utils.Byte_String_To_String (Data_One));
        Text_Io.Put_Line ("");
        Text_Io.Put (" The_Message.The_Id_User_Receive ");
        Text_Io.Put_Line (Utils.Byte_String_To_String (Data_One));


        -- The_Message.The_Socket_Machine_To_Execute
        Text_Io.Put_Line ("");
        Text_Io.Put (" The_Message.The_Id_Machine_To_Execute ");
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data_Four,
                           The_Connection_Data.Count);
        The_Message.The_Host_Machine_To_Execute :=
           Transport_Defs.Host_Id (Data_Four);
        Text_Io.Put_Line (Utils.Byte_String_To_String (Data_Four));


        --The_Message.Command_Is_Ok
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data_One,
                           The_Connection_Data.Count);
        Text_Io.Put_Line ("");
        Text_Io.Put (" The_Message.Command_Is_Ok ");
        if (Natural'Value (Utils.Byte_String_To_String (Data_One)) = 1) then
            The_Message.Command_Is_Ok := True;
            Text_Io.Put ("True");
        else
            The_Message.Command_Is_Ok := False;
            Text_Io.Put ("False");
        end if;


        -- The_Message.Number_Of_The_Question
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data_One,
                           The_Connection_Data.Count);
        The_Message.Number_Of_The_Question :=
           Natural'Value (Utils.Byte_String_To_String (Data_One));
        Text_Io.Put_Line ("");
        Text_Io.Put (" The_Message.Number_Of_The_Question ");
        Text_Io.Put_Line (Utils.Byte_String_To_String (Data_One));


        -- The_Message.The_Socket_Send
        Text_Io.Put_Line ("");
        Text_Io.Put (" The_Message.The_Socket_Send ");
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data_Four,
                           The_Connection_Data.Count);
        The_Message.The_Socket_Send := Transport_Defs.Socket_Id (Data_Four);
        Text_Io.Put_Line (Utils.Byte_String_To_String (Data_Four));


        -- The_Message.The_Socket_Receive
        Text_Io.Put_Line ("");
        Text_Io.Put (" The_Message.The_Socket_Receive ");
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data_Four,
                           The_Connection_Data.Count);
        The_Message.The_Socket_Receive := Transport_Defs.Socket_Id (Data_Four);
        Text_Io.Put_Line (Utils.Byte_String_To_String (Data_Four));


        -- The_Message.The_Socket_To_Execute
        Text_Io.Put_Line ("");
        Text_Io.Put (" The_Message.The_Socket_To_Execute ");
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data_Four,
                           The_Connection_Data.Count);
        The_Message.The_Socket_To_Execute :=
           Transport_Defs.Socket_Id (Data_Four);
        Text_Io.Put_Line (Utils.Byte_String_To_String (Data_Four));


        -- The_Message.Data
        Transport.Receive (The_Connection_Data.Connection,
                           The_Connection_Data.Status, Data,
                           The_Connection_Data.Count);
        String_Tempo := Our_String.Value (Utils.Byte_String_To_String (Data));
        End_Of_Data := False;
        I := 1;
        while not End_Of_Data and I /= Our_Constantes.Length_Of_A_Line loop
            if (Our_String.Char_At (String_Tempo, I) = '+') then
                if (Our_String.Char_At (String_Tempo, I) = '+') then
                    if (Our_String.Char_At (String_Tempo, I) = '+') then
                        String_Tempo := Our_String.Value
                                           (Utils.Byte_String_To_String (Data));
                        Our_String.Set_Length (String_Tempo, I - 1);
                        End_Of_Data := True;
                    else
                        I := I + 1;
                    end if;
                else
                    I := I + 1;
                end if;
            else
                I := I + 1;
            end if;
        end loop;
        Text_Io.Put_Line ("");
        Text_Io.Put (" The_Message.Data ");
        Text_Io.Put (Our_String.Image (String_Tempo));
        The_Message.Data := String_Tempo;

    end Receiver;

begin
    null;
end Communication;

E3 Meta Data

    nblk1=15
    nid=7
    hdr6=20
        [0x00] rec0=21 rec1=00 rec2=01 rec3=066
        [0x01] rec0=1c rec1=00 rec2=0b rec3=064
        [0x02] rec0=18 rec1=00 rec2=0f rec3=040
        [0x03] rec0=18 rec1=00 rec2=0e rec3=010
        [0x04] rec0=14 rec1=00 rec2=0d rec3=048
        [0x05] rec0=1f rec1=00 rec2=10 rec3=022
        [0x06] rec0=1b rec1=00 rec2=09 rec3=044
        [0x07] rec0=15 rec1=00 rec2=08 rec3=004
        [0x08] rec0=19 rec1=00 rec2=0a rec3=04a
        [0x09] rec0=16 rec1=00 rec2=11 rec3=04e
        [0x0a] rec0=07 rec1=00 rec2=13 rec3=07a
        [0x0b] rec0=17 rec1=00 rec2=14 rec3=012
        [0x0c] rec0=17 rec1=00 rec2=04 rec3=07a
        [0x0d] rec0=16 rec1=00 rec2=0c rec3=01e
        [0x0e] rec0=13 rec1=00 rec2=02 rec3=046
        [0x0f] rec0=13 rec1=00 rec2=15 rec3=000
        [0x10] rec0=1a rec1=00 rec2=07 rec3=034
        [0x11] rec0=0f rec1=00 rec2=0c rec3=000
        [0x12] rec0=0d rec1=00 rec2=0c rec3=000
        [0x13] rec0=0d rec1=00 rec2=0c rec3=000
        [0x14] rec0=00 rec1=00 rec2=00 rec3=000
    tail 0x2154d2c8487bc3d4a64ae 0x42a00088462060003
Free Block Chain:
  0x7: 0000  00 06 00 08 80 02 73 3b 02 00 00 00 4f 66 5f 44  ┆      s;    Of_D┆
  0x6: 0000  00 03 00 9a 80 11 2c 20 52 65 73 75 6c 74 5f 53  ┆      , Result_S┆
  0x3: 0000  00 05 00 09 80 06 20 20 20 20 20 20 06 20 3a 3d  ┆              :=┆
  0x5: 0000  00 12 00 34 80 0b 65 72 5f 53 65 6e 64 29 29 29  ┆   4  er_Send)))┆
  0x12: 0000  00 00 00 6b 00 39 20 20 20 20 20 20 20 20 20 20  ┆   k 9          ┆