|
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: 49152 (0xc000) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body The_Orb_Package, seg_05714b
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with Transport_Defs; with Text_Io; with Communication; with The_List_Generic; package body The_Orb_Package is type Type_Object is record The_Host : Transport_Defs.Host_Id (1 .. 4); The_Socket : Transport_Defs.Socket_Id (1 .. 2); The_Id : Id_Object.Type_Id; end record; type Type_Contract is record The_Name : String (1 .. Length_Of_Contract_Name); The_Id : Id_Object.Type_Id; end record; package The_Pack_Of_Object is new The_List_Generic (Type_Element => Type_Object); The_List_Of_Object : The_Pack_Of_Object.The_List; package The_Pack_Of_Contract is new The_List_Generic (Type_Element => Type_Contract); The_List_Of_Contract : The_Pack_Of_Contract.The_List; The_Spy_Number : Natural := 1; --a enlever apres le test -- ********************************************* procedure Orb_Registration (The_Host : Transport_Defs.Host_Id; The_Socket : Transport_Defs.Socket_Id; Id : out Id_Object.Type_Id; Is_Ok : out Boolean) is The_Object : Type_Object; The_Value : Type_Object; The_Id : Id_Object.Type_Id; Iter : The_Pack_Of_Object.The_Iterator; Is_Found : Boolean := False; begin Text_Io.Put_Line ("Orb Registration en cours"); The_Object.The_Host := The_Host; The_Object.The_Socket := The_Socket; -- liste vide -- ========== if The_Pack_Of_Object.Is_Empty (The_List_Of_Object) then Id_Object.Give_Id (The_Id); The_Object.The_Id := The_Id; The_List_Of_Object := The_Pack_Of_Object.Make (The_Object, The_List_Of_Object); Id := The_Id; Is_Ok := True; Text_Io.Put_Line ("registration ok"); else -- liste non vide -- ============== The_Pack_Of_Object.Init (Iter, The_List_Of_Object); -- boucle de recherche -- =================== loop The_Value := The_Pack_Of_Object.Value (Iter); The_Pack_Of_Object.Next (Iter); -- Tests egalite -- ============= The_Object.The_Id := The_Value.The_Id; if (The_Object = The_Value) then -- meme element Is_Found := True; exit; end if; if The_Pack_Of_Object.Done (Iter) then -- fin de liste ? Text_Io.Put_Line ("T_Orb regist -- fin de liste"); exit; end if; end loop; -- sortie -- ====== if Is_Found then Text_Io.Put_Line ("l'object"); Text_Io.Put (Natural'Image (Natural (The_Object.The_Id))); Text_Io.Put_Line (" existe deja dans la liste d'object"); Is_Ok := False; else Id_Object.Give_Id (The_Id); The_Object.The_Id := The_Id; The_List_Of_Object := The_Pack_Of_Object.Make (The_Object, The_List_Of_Object); Id := The_Id; Is_Ok := True; Text_Io.Put_Line ("registration ok"); end if; end if; Text_Io.Put_Line ("fin registration"); end Orb_Registration; -- ********************************************* function Orb_Unregistration (The_Id : Id_Object.Type_Id) return Boolean is Iter : The_Pack_Of_Object.The_Iterator; Iter_Contract : The_Pack_Of_Contract.The_Iterator; The_Value_Contract : Type_Contract; The_Contract : Type_Contract; The_Object : Type_Object; The_Value : Type_Object; Is_Ok : Boolean := False; Is_Found : Boolean := False; End_List_Of_Contract : Boolean := False; The_Message : Message.Type_Of_Message; The_Connection : Connection_Data; begin Text_Io.Put_Line ("Orb UnRegistration en cours"); -- liste vide -- ========== if The_Pack_Of_Object.Is_Empty (The_List_Of_Object) then Text_Io.Put_Line ("liste d'object vide"); return False; else -- liste non vide -- ============== The_Pack_Of_Object.Init (Iter, The_List_Of_Object); -- boucle de recherche de L'identificateur -- ======================================= loop The_Value := The_Pack_Of_Object.Value (Iter); The_Pack_Of_Object.Next (Iter); -- Tests egalite autre champs -- ========================== The_Object := The_Value; The_Object.The_Id := The_Id; if The_Object = The_Value then -- meme element Is_Found := True; exit; end if; if The_Pack_Of_Object.Done (Iter) then -- fin de liste ? exit; end if; end loop; -- sortie -- ====== if Is_Found then Text_Io.Put_Line ("object trouve, effacement en cours"); The_Pack_Of_Object.Delete (The_List_Of_Object, The_Object, Is_Ok); Is_Ok := Id_Object.Delete_Id (The_Id); Text_Io.Put_Line ("unregistration ok"); Text_Io.Put ("envoi unregistration au serveur object"); Text_Io.Put (Natural'Image (Natural (The_Id))); Text_Io.New_Line; The_Message.The_Command := The_Unregistration; The_Message.The_Socket_Send := (0, 0); The_Message.The_Host_Machine_Receive := The_Object.The_Host; The_Message.The_Socket_Receive := The_Object.The_Socket; -- envoi unregistration au serveur -- =============================== Communication.Open_Transmit (The_Message, The_Connection); Communication.Connect_Transmit (The_Mesage, The_Connection); Communication.Transmitter (The_Message, The_Connection); Communication.Disconnect (The_Connection); Communication.Close (The_Connection); Text_Io.Put ("destruction de tous les contract de l'object "); Text_Io.Put (Natural'Image (Natural (The_Id))); Text_Io.Put_Line ("en cours"); -- destruction de tous les contract de la machine ID -- ================================================= loop if not The_Pack_Of_Contract.Is_Empty (The_List_Of_Contract) then -- liste non vide -- ============== The_Pack_Of_Contract.Init (Iter_Contract, The_List_Of_Contract); -- boucle de recherche de contract avec cet identificateur -- ======================================================= loop The_Value_Contract := The_Pack_Of_Contract.Value (Iter_Contract); The_Pack_Of_Contract.Next (Iter_Contract); -- Tests egalite autre champs -- ========================== The_Contract := The_Value_Contract; The_Contract.The_Id := The_Id; if The_Contract = The_Value_Contract then -- meme element Is_Found := True; exit; end if; if The_Pack_Of_Contract.Done (Iter_Contract) then -- fin de liste ? End_List_Of_Contract := True; exit; end if; end loop; if Is_Found then -- effacement du contract de la liste des contract -- =============================================== Text_Io.Put ("effacement du contract "); Text_Io.Put (The_Contract.The_Name); Text_Io.Put_Line (" sur l'object "); Text_Io.Put (Natural'Image (Natural (The_Contract.The_Id))); Text_Io.New_Line; The_Pack_Of_Contract.Delete (The_List_Of_Contract, The_Contract, Is_Ok); end if; else -- si liste de contract est vide -- ============================= exit; end if; -- si on est a la fin de la liste de contract -- ========================================== if End_List_Of_Contract then exit; end if; end loop; Text_Io.Put ("fin d'effacement des contract de l'object "); Text_Io.Put (Natural'Image (Natural (The_Id))); Text_Io.New_Line; return True; end if; return False; end if; end Orb_Unregistration; -- ********************************************* function Orb_Publication (The_Name : String; The_Id : Id_Object.Type_Id) return Boolean is The_Contract : constant Type_Contract := (The_Name (1 .. Length_Of_Contract_Name), The_Id); -- ======================== function Seak_Id_Object (A_Id : Id_Object.Type_Id) return Boolean is Iter_Object : The_Pack_Of_Object.The_Iterator; The_Object : Type_Object; The_Value_Object : Type_Object; Test : Boolean := False; begin if The_Pack_Of_Object.Is_Empty (The_List_Of_Object) then Text_Io.Put_Line ("liste d'object vide"); return False; else -- Recherche de L'object -- ===================== The_Pack_Of_Object.Init (Iter_Object, The_List_Of_Object); loop The_Value_Object := The_Pack_Of_Object.Value (Iter_Object); The_Pack_Of_Object.Next (Iter_Object); -- Tests egalite The_Object := The_Value_Object; The_Object.The_Id := A_Id; if The_Object = The_Value_Object then Test := True; exit; end if; if The_Pack_Of_Object.Done (Iter_Object) then -- fin de liste ? exit; end if; end loop; if Test then return True; else return False; end if; end if; end Seak_Id_Object; begin Text_Io.Put_Line ("Orb publication du contract "); Text_Io.Put (The_Name (1 .. Length_Of_Contract_Name)); Text_Io.Put (" de l'object"); Text_Io.Put (Natural'Image (Natural (The_Id))); Text_Io.Put_Line ("en cours"); -- recherche de l'object -- ===================== if not Seak_Id_Object (The_Id) then return False; else -- liste vide de contract -- ====================== if The_Pack_Of_Contract.Is_Empty (The_List_Of_Contract) then The_List_Of_Contract := The_Pack_Of_Contract.Make (The_Contract, The_List_Of_Contract); return True; else -- recherche d'un meme contract -- ============================ if The_Pack_Of_Contract.Search (The_List_Of_Contract, The_Contract) then Text_Io.Put_Line ("le contract "); Text_Io.Put (The_Name); Text_Io.Put (" sur l'object"); Text_Io.Put (Natural'Image (Natural (The_Id))); Text_Io.Put_Line ("existe deja"); return False; else -- ajout du dit contract si pas trouve -- =================================== The_List_Of_Contract := The_Pack_Of_Contract.Make (The_Contract, The_List_Of_Contract); Text_Io.Put_Line ("publication ok"); return True; end if; end if; end if; end Orb_Publication; -- ********************************************* function Orb_Unpublication (The_Name : String; The_Id : Id_Object.Type_Id := 0) return Boolean is Iter : The_Pack_Of_Contract.The_Iterator; The_Contract : Type_Contract := (The_Name (1 .. Length_Of_Contract_Name), The_Id); Null_Id : Id_Object.Type_Id := 0; The_Value : Type_Contract; Is_Ok : Boolean := False; Is_Found : Boolean := False; Is_The_End_Of_List : Boolean := False; The_Connection : Connection_Data; The_Message_To_Send : Message.Type_Of_Message; The_Object : Type_Object; The_Value_Object : Type_Object; Iter_Object : The_Pack_Of_Object.The_Iterator; begin Text_Io.Put ("Orb unpublication du contract "); Text_Io.Put (The_Name); Text_Io.Put_Line (" en cours"); -- liste vide -- ========== if The_Pack_Of_Contract.Is_Empty (The_List_Of_Contract) then Text_Io.Put_Line ("liste de contract vide"); return False; else -- liste non vide, recherche si l'identificateur est donne -- ======================================================= The_Value := The_Contract; The_Value.The_Id := Null_Id; if The_Contract = The_Value then -- Identificateur non donne -- ======================== -- boucle de recherche des contrats a differents Id -- ================================================ loop The_Pack_Of_Contract.Init (Iter, The_List_Of_Contract); loop The_Value := The_Pack_Of_Contract.Value (Iter); The_Pack_Of_Contract.Next (Iter); -- Tests egalite autre champs -- ========================== The_Contract.The_Id := The_Value.The_Id; if The_Contract = The_Value then -- meme element Is_Found := True; exit; end if; if The_Pack_Of_Contract.Done (Iter) then -- fin de liste ? Is_The_End_Of_List := True; exit; end if; end loop; -- sortie -- ====== if Is_Found then Is_Ok := True; The_Pack_Of_Contract.Delete (The_List_Of_Contract, The_Contract, Is_Ok); end if; if Is_The_End_Of_List then exit; end if; end loop; if Is_Ok then Text_Io.Put_Line ("unpublication ok"); else Text_Io.Put_Line ("contract non trouve"); end if; return Is_Ok; else -- identificateur connu -- ==================== if not The_Pack_Of_Contract.Search (The_List_Of_Contract, The_Contract) then Text_Io.Put_Line ("contract non trouve"); return False; else -- suppression du contract dans la liste -- ===================================== The_Pack_Of_Contract.Delete (The_List_Of_Contract, The_Contract, Is_Ok); Text_Io.Put_Line ("unpublication ok"); return Is_Ok; end if; end if; end if; end Orb_Unpublication; -- ********************************************* procedure Orb_Request (The_M : Message.Type_Of_Message; Return_Message : in out Message.Type_Of_Message; Is_Ok : out Boolean) is The_New_Message : Message.Type_Of_Message; The_Name : constant String (1 .. Length_Of_Contract_Name) := Our_String.Image (The_M.Data) (1 .. Length_Of_Contract_Name); The_Contract : Type_Contract := (The_Name, The_M.The_Id_User_Receive); The_Id_Receive : Id_Object.Type_Id := The_M.The_Id_User_Receive; Null_Id_Contract : Type_Contract := (The_Name, 0); The_Answer : Our_String.Variable_String; The_Value : Type_Contract; Iter : The_Pack_Of_Contract.The_Iterator; Is_Found : Boolean := False; -- ================================ procedure Seak_Contract (Name : String; A_Contract : out Type_Contract; Is_Ok : out Boolean; The_Id : Id_Object.Type_Id) is The_Seak_Name : String (1 .. Length_Of_Contract_Name); Iter_Contract : The_Pack_Of_Contract.The_Iterator; The_Contract : Type_Contract; The_Value : Type_Contract; Null_Contract : Type_Contract; Test : Boolean := False; begin The_Seak_Name := Name (1 .. Length_Of_Contract_Name); The_Contract := (The_Seak_Name, The_Id); Null_Contract := The_Contract; Null_Contract.The_Id := Id_Object.Type_Id (0); if not (The_Contract = Null_Contract) then -- identificateur de machine contenu dans le contract -- ================================================== -- recherche du contract -- ===================== Text_Io.Put_Line ("id connu"); Is_Ok := The_Pack_Of_Contract.Search (The_List_Of_Contract, The_Contract); A_Contract := The_Contract; else -- Identificateur indefini, Recherche de l'Id du contrat -- ==================================================== Text_Io.Put_Line ("id inconnu"); The_Pack_Of_Contract.Init (Iter_Contract, The_List_Of_Contract); loop The_Value := The_Pack_Of_Contract.Value (Iter_Contract); The_Pack_Of_Contract.Next (Iter_Contract); -- Tests egalite The_Contract := The_Value; The_Contract.The_Name := The_Seak_Name; if The_Contract = The_Value then -- meme contract Test := True; exit; end if; if The_Pack_Of_Contract.Done (Iter_Contract) then -- fin de liste ? exit; end if; end loop; A_Contract := The_Contract; if Test then Is_Ok := True; else Is_Ok := False; end if; end if; end Seak_Contract; -- ================================ procedure Send_Message (A_Contract : Type_Contract; A_Answer : out Our_String.Variable_String) is The_Message_To_Send : Message.Type_Of_Message; The_Received_Message : Message.Type_Of_Message; The_Connection_Data : Connection_Data; Iter_Object : The_Pack_Of_Object.The_Iterator; The_Value : Type_Object; The_Object : Type_Object; Test : Boolean := False; The_Connection : Connection_Data; begin -- Recherche de la machine -- ======================== The_Pack_Of_Object.Init (Iter_Object, The_List_Of_Object); loop The_Value := The_Pack_Of_Object.Value (Iter_Object); The_Pack_Of_Object.Next (Iter_Object); -- Tests egalite The_Object := The_Value; The_Object.The_Id := A_Contract.The_Id; if The_Object = The_Value then -- meme contract Test := True; exit; end if; if The_Pack_Of_Object.Done (Iter_Object) then -- fin de liste ? exit; end if; end loop; -- N.B. on est oblige de trouver un Object avec l'identificateur donne The_Message_To_Send.The_Command := The_Request; The_Message_To_Send.The_Host_Machine_Receive := The_Object.The_Host; The_Message_To_Send.The_Socket_Receive := The_Object.The_Socket; The_Message_To_Send.Data := Our_String.Value (A_Contract.The_Name); The_Message_To_Send.The_Socket_Send := (0, 0); Text_Io.Put ("essai demande fonction "); Text_Io.Put (The_Name); Text_Io.Put (" a l'object numero "); Text_Io.Put (Natural'Image (Natural (A_Contract.The_Id))); Text_Io.New_Line; -- envoi question au serveur -- ========================= Communication.Open_Transmit (The_Message_To_Send, The_Connection); Communication.Connect_Transmit (The_Message_To_Send, The_Connection); Communication.Transmitter (The_Message_To_Send, The_Connection); Communication.Disconnect (The_Connection); -- attente reponse du serveur -- ========================== Text_Io.Put ("attente reponse du serveur"); Communication.Connect_Receive (The_Connection); Communication.Receiver (The_Received_Message, The_Connection); Communication.Disconnect (The_Connection); Communication.Close (The_Connection); Text_Io.Put_Line ("reponse recue"); Text_Io.Put (Our_String.Image (The_Received_Message.Data)); Text_Io.New_Line; A_Answer := The_Received_Message.Data; end Send_Message; -- ================================ begin -- liste de contrats vide -- ====================== if The_Pack_Of_Contract.Is_Empty (The_List_Of_Contract) then Is_Ok := False; else -- Recherche de L'Id du contrat s'il existe -- ======================================== Text_Io.Put ("recherche du contract ... "); Seak_Contract (Our_String.Image (The_M.Data), The_Contract, Is_Found, The_Contract.The_Id); if not Is_Found then Text_Io.Put_Line ("non trouve"); Is_Ok := False; else -- contrat trouve -- ============== Text_Io.Put_Line ("trouve ok"); Send_Message (The_Contract, The_Answer); Return_Message.Data := The_Answer; Is_Ok := True; end if; end if; end Orb_Request; -- ********************************************* task Return_Answer is entry Ok_Message_Is_To_Send (Return_Message : in out Message.Type_Of_Message); end Return_Answer; -- ********************************************* task body Return_Answer is The_Connection : Connection_Data; A_Return_Message : Message.Type_Of_Message; begin A_Return_Message.The_Socket_Send := (0, 0); Communication.Open_Transmit (A_Return_Message, The_Connection); loop accept Ok_Message_Is_To_Send (Return_Message : in out Message.Type_Of_Message) do Text_Io.Put_Line ("envoi reponse"); Communication.Connect_Transmit (Return_Message, The_Connection); Communication.Transmitter (Return_Message, The_Connection); Communication.Disconnect (The_Connection); end Ok_Message_Is_To_Send; end loop; Communication.Close (The_Connection); end Return_Answer; -- ********************************************* task Orb_Task is entry Ok_Message_Is_Receive (The_Message : in Message.Type_Of_Message); end Orb_Task; task body Orb_Task is --The_Message : Message.Type_Of_Message; Is_Ok : Boolean := True; The_Id : Id_Object.Type_Id; Return_Message : Message.Type_Of_Message; begin loop accept Ok_Message_Is_Receive (The_Message : in Message.Type_Of_Message) do case The_Message.The_Command is when The_Registration => -- parametres de reponse -- ===================== Return_Message.The_Host_Machine_Receive := The_Message.The_Host_Machine_Send; Return_Message.The_Socket_Receive := The_Message.The_Socket_Send; -- gestion -- ======= Orb_Registration (The_Message.The_Host_Machine_Send, The_Message.The_Socket_Send, The_Id, Is_Ok); Return_Message.The_Id_User_Send := The_Id; Return_Answer.Ok_Message_Is_To_Send (Return_Message); when The_Unregistration => -- parametres de reponse -- ===================== Return_Message.The_Host_Machine_Receive := The_Message.The_Host_Machine_Send; Return_Message.The_Socket_Receive := The_Message.The_Socket_Send; Is_Ok := Orb_Unregistration (The_Message.The_Id_User_Send); Return_Message.Command_Is_Ok := Is_Ok; Return_Answer.Ok_Message_Is_To_Send (Return_Message); when The_Request => -- parametres de reponse -- ===================== Return_Message.The_Host_Machine_Receive := The_Message.The_Host_Machine_Send; Return_Message.The_Socket_Receive := The_Message.The_Socket_Send; -- gestion -- ======= Orb_Request (The_Message, Return_Message, Is_Ok); Return_Message.Command_Is_Ok := Is_Ok; Return_Answer.Ok_Message_Is_To_Send (Return_Message); when The_Publication => -- parametres de reponse -- ===================== Return_Message.The_Host_Machine_Receive := The_Message.The_Host_Machine_Send; Return_Message.The_Socket_Receive := The_Message.The_Socket_Send; Is_Ok := Orb_Publication (Our_String.Image (The_Message.Data), The_Message.The_Id_User_Send); Return_Message.Command_Is_Ok := Is_Ok; Return_Answer.Ok_Message_Is_To_Send (Return_Message); when The_Unpublication => -- parametres de reponse -- ===================== Return_Message.The_Host_Machine_Receive := The_Message.The_Host_Machine_Send; Return_Message.The_Socket_Receive := The_Message.The_Socket_Send; Is_Ok := Orb_Unpublication (Our_String.Image (The_Message.Data), The_Message.The_Id_User_Send); Return_Message.Command_Is_Ok := Is_Ok; Return_Answer.Ok_Message_Is_To_Send (Return_Message); when others => Text_Io.Put_Line ("T_Orb : Message traite ok"); end case; end Ok_Message_Is_Receive; end loop; end Orb_Task; -- ********************************************* task Orb_Receiver_Task; task body Orb_Receiver_Task is The_Message : Message.Type_Of_Message; begin Text_Io.Put_Line ("ouverture connection pour l'orb"); Communication.Open_Receive (The_Orb.The_Socket, The_Orb_Connection); loop Text_Io.Put_Line ("Orb attente de message "); Communication.Connect_Receive (The_Orb_Connection); Communication.Receiver (The_Message, The_Orb_Connection); Communication.Disconnect (The_Orb_Connection); Text_Io.Put_Line (" 1 Message est recu"); Orb_Task.Ok_Message_Is_Receive (The_Message); end loop; Communication.Close (The_Orb_Connection); end Orb_Receiver_Task; -- ********************************************* begin null; end The_Orb_Package;
nblk1=2f nid=1f hdr6=48 [0x00] rec0=16 rec1=00 rec2=01 rec3=076 [0x01] rec0=1e rec1=00 rec2=25 rec3=026 [0x02] rec0=1f rec1=00 rec2=20 rec3=054 [0x03] rec0=01 rec1=00 rec2=29 rec3=010 [0x04] rec0=1a rec1=00 rec2=2c rec3=04a [0x05] rec0=1c rec1=00 rec2=2d rec3=06a [0x06] rec0=20 rec1=00 rec2=21 rec3=010 [0x07] rec0=13 rec1=00 rec2=2e rec3=06c [0x08] rec0=00 rec1=00 rec2=07 rec3=002 [0x09] rec0=15 rec1=00 rec2=23 rec3=01e [0x0a] rec0=08 rec1=00 rec2=13 rec3=014 [0x0b] rec0=14 rec1=00 rec2=0c rec3=062 [0x0c] rec0=15 rec1=00 rec2=0b rec3=014 [0x0d] rec0=1b rec1=00 rec2=2a rec3=002 [0x0e] rec0=1c rec1=00 rec2=14 rec3=02e [0x0f] rec0=1c rec1=00 rec2=1c rec3=020 [0x10] rec0=18 rec1=00 rec2=2f rec3=010 [0x11] rec0=1a rec1=00 rec2=0f rec3=054 [0x12] rec0=18 rec1=00 rec2=03 rec3=076 [0x13] rec0=1c rec1=00 rec2=09 rec3=064 [0x14] rec0=1d rec1=00 rec2=27 rec3=008 [0x15] rec0=12 rec1=00 rec2=08 rec3=030 [0x16] rec0=18 rec1=00 rec2=17 rec3=004 [0x17] rec0=14 rec1=00 rec2=0e rec3=000 [0x18] rec0=1c rec1=00 rec2=04 rec3=04c [0x19] rec0=1c rec1=00 rec2=16 rec3=014 [0x1a] rec0=14 rec1=00 rec2=06 rec3=020 [0x1b] rec0=15 rec1=00 rec2=1b rec3=02e [0x1c] rec0=1f rec1=00 rec2=0a rec3=012 [0x1d] rec0=07 rec1=00 rec2=1d rec3=068 [0x1e] rec0=19 rec1=00 rec2=28 rec3=05a [0x1f] rec0=18 rec1=00 rec2=15 rec3=044 [0x20] rec0=16 rec1=00 rec2=2b rec3=052 [0x21] rec0=15 rec1=00 rec2=1e rec3=03c [0x22] rec0=19 rec1=00 rec2=05 rec3=030 [0x23] rec0=18 rec1=00 rec2=0d rec3=000 [0x24] rec0=18 rec1=00 rec2=0d rec3=000 [0x25] rec0=13 rec1=00 rec2=2b rec3=020 [0x26] rec0=14 rec1=00 rec2=1e rec3=038 [0x27] rec0=09 rec1=00 rec2=19 rec3=010 [0x28] rec0=13 rec1=00 rec2=26 rec3=016 [0x29] rec0=13 rec1=00 rec2=0d rec3=026 [0x2a] rec0=10 rec1=00 rec2=05 rec3=07a [0x2b] rec0=14 rec1=00 rec2=07 rec3=020 [0x2c] rec0=1e rec1=00 rec2=29 rec3=000 [0x2d] rec0=10 rec1=00 rec2=1f rec3=000 [0x2e] rec0=00 rec1=00 rec2=09 rec3=000 tail 0x21763c47087c59dafe855 0x42a00088462060003 Free Block Chain: 0x1f: 0000 00 26 00 22 80 0c 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ┆ & " ==========┆ 0x26: 0000 00 19 03 fc 80 35 20 20 20 20 20 20 20 20 20 20 ┆ 5 ┆ 0x19: 0000 00 02 01 c0 80 21 72 5f 43 6f 6e 73 74 61 6e 74 ┆ !r_Constant┆ 0x2: 0000 00 10 03 fc 80 0e 20 20 20 20 20 20 20 20 20 20 ┆ ┆ 0x10: 0000 00 22 00 4b 80 1b 6e 65 20 28 22 63 6f 6e 74 72 ┆ " K ne ("contr┆ 0x22: 0000 00 12 02 73 80 0d 55 73 65 72 5f 53 65 6e 64 29 ┆ s User_Send)┆ 0x12: 0000 00 24 01 6d 80 46 65 5f 4e 65 77 5f 4d 65 73 73 ┆ $ m Fe_New_Mess┆ 0x24: 0000 00 11 00 07 80 04 2d 2d 49 74 04 20 20 20 20 09 ┆ --It ┆ 0x11: 0000 00 18 00 ff 80 33 20 20 20 20 20 20 20 20 20 20 ┆ 3 ┆ 0x18: 0000 00 1a 03 fc 80 08 6e 64 20 6c 6f 6f 70 3b 08 00 ┆ nd loop; ┆ 0x1a: 0000 00 00 00 13 80 10 20 20 20 20 28 54 68 65 5f 4e ┆ (The_N┆