|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 10240 (0x2800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Message, seg_0560c7, seg_05620d
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
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.Copy (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
S (L_Constant.Position_Of_Emet .. L_Constant.Position_Of_Dest - 1) :=
Byte_Defs.Byte_String (O.Emet);
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));
My_Channel_User.Send (Channel, S);
O.Emet := Parametre_Defs.Identificator
(S (L_Constant.Position_Of_Emet ..
L_Constant.Position_Of_Dest - 1));
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;
nblk1=9
nid=8
hdr6=e
[0x00] rec0=1d rec1=00 rec2=01 rec3=004
[0x01] rec0=13 rec1=00 rec2=09 rec3=02c
[0x02] rec0=10 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
[0x07] rec0=15 rec1=00 rec2=06 rec3=001
[0x08] rec0=90 rec1=00 rec2=00 rec3=000
tail 0x21761b1e887c3533c5143 0x42a00088462060003
Free Block Chain:
0x8: 0000 00 02 00 27 80 24 20 20 20 20 20 20 20 20 20 20 ┆ ' $ ┆
0x2: 0000 00 00 00 4d 80 1d 6e 64 65 64 5f 53 74 72 69 6e ┆ M nded_Strin┆