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

⟦f0ad8ba2c⟧ Ada Source

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

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 Parametre;
with L_Constant;
with B_Constant;
with Byte_Defs;
with Utils;
with Bounded_String;
with My_Channel_User;
with Task_Io;
package body Message is
    procedure Create (O : in out Object;
                      Emet : Parametre_Defs.Identificator;
                      Dest : Parametre_Defs.Identificator;
                      Typed : Parametre_Defs.Message_Type;
                      Number : Parametre_Defs.Message_Number;
                      Content : Liste_Parametre.List) is
        Iterat : Liste_Parametre.Iterator;

    begin

        O.Emet := Emet;
        O.Dest := Dest;
        Bounded_String.Append (O.Mess,
                               Parametre_Defs.Message_Type'Image (Typed));
        Bounded_String.Append (O.Mess, String (Number));

        Liste_Parametre.Init (Iterat, Content);
        while (Liste_Parametre.Done (Iterat) /= True) loop

            Bounded_String.Append
               (O.Mess, Bounded_String.Image (Liste_Parametre.Value (Iterat)));
            Bounded_String.Append (O.Mess, Parametre_Defs.Message_Separator);
            Liste_Parametre.Next (Iterat);
        end loop;
        Bounded_String.Append (O.Mess, Parametre_Defs.Message_End);
    end Create;

    procedure Send (O : in out Object;
                    Channel : in out My_Channel_User.Object) is
        S : Byte_Defs.Byte_String
               (1 .. B_Constant.Trame_Max_Size +
                        2 * (L_Constant.Size_Of_Identificator));  
    begin  
        Task_Io.Put_Line ("debut send");
        S (L_Constant.Position_Of_Emet .. L_Constant.Position_Of_Dest - 1) :=
           Byte_Defs.Byte_String (O.Emet);
        Task_Io.Put_Line ("premiere affectation");
        S (L_Constant.Position_Of_Dest .. L_Constant.Position_Of_Mess - 1) :=
           Byte_Defs.Byte_String (O.Dest);
        S (L_Constant.Position_Of_Mess .. Bounded_String.Length (O.Mess) +
                                             L_Constant.Position_Of_Mess - 1) :=
           Utils.String_To_Byte_String (Bounded_String.Image (O.Mess));
        Task_Io.Put_Line ("affectations finies");
        My_Channel_User.Send (Channel, S);
        Task_Io.Put_Line ("send channel user  fini");
        O.Emet := Parametre_Defs.Identificator
                     (S (L_Constant.Position_Of_Emet ..
                            L_Constant.Position_Of_Dest - 1));
        Task_Io.Put_Line ("message send fini");
    end Send;

    procedure Receive (O : out Object;
                       Channel : in out Channel_Operator.Object;
                       Result : out Boolean) is
        Data : Byte_Defs.Byte_String
                  (1 .. B_Constant.Trame_Max_Size +
                           2 * (L_Constant.Size_Of_Identificator));
    begin
        Channel_Operator.Receive (Channel, Data, Result);
        O.Emet := Parametre_Defs.Identificator
                     (Data (L_Constant.Position_Of_Emet ..
                               L_Constant.Position_Of_Dest - 1));
        O.Dest := Parametre_Defs.Identificator
                     (Data (L_Constant.Position_Of_Dest ..
                               L_Constant.Position_Of_Mess - 1));
        O.Mess := Bounded_String.Value
                     (Utils.Byte_String_To_String
                         (Data (L_Constant.Position_Of_Mess ..
                                   B_Constant.Trame_Max_Size +
                                      2 * (L_Constant.Size_Of_Identificator))),
                      B_Constant.Trame_Max_Size);
    end Receive;

    procedure Set_Emet (O : in out Object;
                        Emet : Parametre_Defs.Identificator) is
    begin
        O.Emet := Emet;
    end Set_Emet;

    procedure Set_Dest (O : in out Object;
                        Dest : Parametre_Defs.Identificator) is
    begin
        O.Dest := Dest;
    end Set_Dest;

    procedure Set_Type (O : in out Object;
                        Typed : Parametre_Defs.Message_Type) is
    begin
        Bounded_String.Replace (O.Mess, L_Constant.Position_Of_Type,
                                Parametre_Defs.Message_Type'Image (Typed));
    end Set_Type;

    function Get_Emet (O : Object) return Parametre_Defs.Identificator is

    begin
        return O.Emet;
    end Get_Emet;

    function Get_Dest (O : Object) return Parametre_Defs.Identificator is
    begin
        return O.Dest;
    end Get_Dest;

    function Get_Number (O : Object) return Parametre_Defs.Message_Number is

    begin
        return Parametre_Defs.Message_Number
                  (Bounded_String.Extract
                      (O.Mess, L_Constant.Position_Of_Number,
                       L_Constant.Position_Of_Containt - 1));
    end Get_Number;

    function Get_Type (O : Object) return Parametre_Defs.Message_Type is

    begin
        return Parametre_Defs.Message_Type'Value
                  (Bounded_String.Extract (O.Mess, L_Constant.Position_Of_Type,
                                           L_Constant.Position_Of_Number - 1));
    end Get_Type;

    function Get_Containt (O : Object) return Liste_Parametre.List is
        I : Positive := L_Constant.Position_Of_Containt;
        Car : Character;
        Continue : Boolean := True;
        Tampon : Parametre.Variable_String;
        Result : Liste_Parametre.List;
        Iterat : Liste_Parametre.Iterator;
    begin
        Car := Bounded_String.Char_At (O.Mess, I);
        if (Car = Parametre_Defs.Message_End) then
            Continue := False;
        end if;
        while Continue loop
            while (Car /= Parametre_Defs.Message_Separator) loop
                Bounded_String.Append (Tampon, Car);
                I := I + 1;
                Car := Bounded_String.Char_At (O.Mess, I);
            end loop;
            Result := Liste_Parametre.Make (Tampon, Result);
            Bounded_String.Free (Tampon);
            I := I + 1;
            Car := Bounded_String.Char_At (O.Mess, I);
            if (Car = Parametre_Defs.Message_End) then
                Continue := False;  
            end if;

        end loop;
        return Result;
    end Get_Containt;
end Message;

E3 Meta Data

    nblk1=7
    nid=0
    hdr6=e
        [0x00] rec0=1f rec1=00 rec2=01 rec3=056
        [0x01] rec0=14 rec1=00 rec2=02 rec3=054
        [0x02] rec0=15 rec1=00 rec2=03 rec3=00a
        [0x03] rec0=19 rec1=00 rec2=04 rec3=010
        [0x04] rec0=14 rec1=00 rec2=07 rec3=038
        [0x05] rec0=18 rec1=00 rec2=05 rec3=036
        [0x06] rec0=15 rec1=00 rec2=06 rec3=000
    tail 0x2175f3a3087bc8eb66183 0x42a00088462060003