|
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 - 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┆