|
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: 22528 (0x5800) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body The_Orb_Package, seg_0555c7
└─⟦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; with Byte_Defs; 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 .. 4); end record; type Type_Contract is record The_Host : Transport_Defs.Host_Id (1 .. 4); The_Socket : Transport_Defs.Socket_Id (1 .. 4); The_Number : Natural; The_Name : Variable_String; end record; type Type_Spy is record The_Host : Transport_Defs.Host_Id (1 .. 4); The_Socket : Transport_Defs.Socket_Id (1 .. 4); The_Number : Natural; end record; package The_Pack_Of_Spy is new The_List_Generic (Type_Element => Type_Spy); The_List_Of_Spy : The_Pack_Of_Spy.The_List; package The_Pack_Of_Object is new The_List_Generic (Type_Element => Type_Object); The_List_Of_Object : The_Pack_Of_Object.The_List; The_Spy_Number : Natural := 1; --a enlever apres le test -- ********************************************* function Orb_Publication (The_Host : Transport_Defs.Host_Id; The_Socket : Transport_Defs.Socket_Id; The_Name : Variable_String) return Boolean is The_Object : Type_Object := (The_Host, The_Socket); The_Iter : The_Pack_Of_Object.The_Iterator; Is_Found : Boolean := False; begin -- Recherche de l'objet en liste -- ============================= Is_Found := The_Pack_Of_Object.Search (The_List_Of_Object, The_Object); if Is_Found then return False; -- l'objet existe deja dans la liste else -- insere L'objet The_List_Of_Object := The_Pack_Of_Object.Make (The_Object, The_List_Of_Object); return True; end if; end Orb_Publication; -- ********************************************* function Orb_Unpublication (The_Host : Transport_Defs.Host_Id; The_Socket : Transport_Defs.Socket_Id; The_Name : Variable_String) return Boolean is The_Element : Type_Object := (The_Host, The_Socket); Is_Ok : Boolean := False; begin The_Pack_Of_Object.Delete (The_List_Of_Object, The_Element, Is_Ok); return Is_Ok; end Orb_Unpublication; -- ********************************************* function Orb_Registration (The_Host : Transport_Defs.Host_Id; The_Socket : Transport_Defs.Socket_Id) return Boolean is The_Object : Type_Object := (The_Host, The_Socket); The_Iter : The_Pack_Of_Object.The_Iterator; Is_Found : Boolean := False; begin -- Recherche de l'objet en liste -- ============================= Is_Found := The_Pack_Of_Object.Search (The_List_Of_Object, The_Object); if Is_Found then return False; -- l'objet existe deja dans la liste else -- insere L'objet The_List_Of_Object := The_Pack_Of_Object.Make (The_Object, The_List_Of_Object); return True; end if; end Orb_Registration; -- ********************************************* function Orb_Unregistration (The_Host : Transport_Defs.Host_Id; The_Socket : Transport_Defs.Socket_Id) return Boolean is The_Element : Type_Object := (The_Host, The_Socket); Is_Ok : Boolean := False; begin The_Pack_Of_Object.Delete (The_List_Of_Object, The_Element, Is_Ok); return Is_Ok; end Orb_Unregistration; -- ********************************************* procedure Orb_Query is begin [statement] end Orb_Query; -- ********************************************* procedure Orb_Request (The_Message : Message.Type_Of_Message; The_Connection_Data : in out Our_Constantes.Connection_Data) is The_New_Message : Message.Type_Of_Message; begin The_New_Message.The_Command := Our_Constantes.The_Request; The_New_Message.The_Host_Machine_Send := The_Message.The_Host_Machine_Send; The_New_Message.The_Host_Machine_Receive := The_Message.The_Host_Machine_To_Execute; The_New_Message.Data := The_Message.Data; The_New_Message.The_Socket_Send := The_Message.The_Socket_Send; The_New_Message.The_Socket_Receive := The_Message.The_Socket_To_Execute; Communication.Connection_Transmitter (The_New_Message, The_Connection_Data); Communication.Transmitter (The_New_Message, The_Connection_Data); Communication.Disconnection (The_Connection_Data); Text_Io.Put_Line (" envoi a la tache tierce Ok"); end Orb_Request; -- ********************************************* procedure Orb_Notification (The_Host : Transport_Defs.Host_Id; The_Socket : Transport_Defs.Socket_Id; The_Data : Our_String.Variable_String; The_Connection_Data : in out Our_Constantes.Connection_Data) is The_New_Message : Message.Type_Of_Message; Iter : The_Pack_Of_Object.The_Iterator; A_Object : Type_Object; Boy_Host : Transport_Defs.Host_Id (1 .. 4) := The_Host; Boy_Socket : Transport_Defs.Socket_Id (1 .. 4) := The_Socket; begin The_New_Message.The_Command := Our_Constantes.The_Notification; The_New_Message.The_Host_Machine_Send := The_Host; The_New_Message.The_Socket_Send := The_Socket; The_New_Message.Data := The_Data; --on envoie un message a toutes les autres taches if not The_Pack_Of_Object.Is_Empty (The_List_Of_Object) then The_Pack_Of_Object.Init (Iter, The_List_Of_Object); loop A_Object := The_Pack_Of_Object.Value (Iter); The_New_Message.The_Socket_Receive := A_Object.The_Socket; The_New_Message.The_Host_Machine_Receive := A_Object.The_Host; -- on teste l'identite du destinataire -- pour qu'il ne recoive pas son propre message -- if not ((Byte_Defs.Byte_String (Boy_Host)= -- Byte_Defs.Byte_String (A_Object.The_Host)) and -- (Socket_Id'Image (Boy_Socket) = -- Socket_Id'Image (A_Object.The_Socket))) then Communication.Connection_Transmitter (The_New_Message, The_Connection_Data); Communication.Transmitter (The_New_Message, The_Connection_Data); Communication.Disconnection (The_Connection_Data); Text_Io.Put_Line (" Un Message d'info generale a ete envoye "); -- end if; The_Pack_Of_Object.Next (Iter); if The_Pack_Of_Object.Done (Iter) then exit; end if; end loop; end if; end Orb_Notification; -- ********************************************* procedure Orb_Forward (The_Message : Message.Type_Of_Message; The_Connection_Data : in out Our_Constantes.Connection_Data) is The_New_Message : Message.Type_Of_Message; begin The_New_Message.The_Command := Our_Constantes.The_Forward; The_New_Message.The_Host_Machine_Send := The_Message.The_Host_Machine_Send; The_New_Message.The_Host_Machine_Receive := The_Message.The_Host_Machine_To_Execute; The_New_Message.Data := The_Message.Data; The_New_Message.The_Socket_Send := The_Message.The_Socket_Send; The_New_Message.The_Socket_Receive := The_Message.The_Socket_To_Execute; Communication.Connection_Transmitter (The_New_Message, The_Connection_Data); Communication.Transmitter (The_New_Message, The_Connection_Data); Communication.Disconnection (The_Connection_Data); Text_Io.Put_Line (" envoi a la tache tierce Ok"); end Orb_Forward; -- ********************************************* function Orb_Subscription (The_Host : Transport_Defs.Host_Id; The_Socket : Transport_Defs.Socket_Id; The_Number : Natural) return Boolean is The_Spy : Type_Spy := (The_Host, The_Socket, The_Number); The_Iter : The_Pack_Of_Spy.The_Iterator; Is_Found : Boolean := False; begin -- Recherche de l'objet en liste -- ============================= Is_Found := The_Pack_Of_Spy.Search (The_List_Of_Spy, The_Spy); if Is_Found then return False; -- l'espion existe deja dans la liste else -- insere L'espion The_List_Of_Spy := The_Pack_Of_Spy.Make (The_Spy, The_List_Of_Spy); return True; end if; end Orb_Subscription; -- ********************************************* function Orb_Unsubscription (The_Host : Transport_Defs.Host_Id; The_Socket : Transport_Defs.Socket_Id; The_Number : Natural) return Boolean is The_Element : Type_Spy := (The_Host, The_Socket, The_Number); Is_Ok : Boolean := False; begin The_Pack_Of_Spy.Delete (The_List_Of_Spy, The_Element, Is_Ok); return Is_Ok; end Orb_Unsubscription; -- ********************************************* procedure Filtration is begin [statement] end Filtration; -- ********************************************* procedure Unfiltration is begin [statement] end Unfiltration; -- ********************************************* procedure Send_Answer (Number_Of_The_Question : Natural; The_Host : Transport_Defs.Host_Id; The_Socket : Transport_Defs.Socket_Id; The_Connection_Data : in out Our_Constantes.Connection_Data) is The_Answer_Message : Message.Type_Of_Message; begin The_Answer_Message.The_Command := Our_Constantes.None; The_Answer_Message.The_Host_Machine_Send := Our_Constantes.The_Orb.The_Host; The_Answer_Message.The_Socket_Send := Our_Constantes.The_Orb.The_Socket; The_Answer_Message.The_Host_Machine_Receive := The_Host; The_Answer_Message.The_Socket_Receive := The_Socket; The_Answer_Message.Command_Is_Ok := True; The_Answer_Message.Number_Of_The_Question := Number_Of_The_Question; Text_Io.Put_Line ("Essai de reponse"); Communication.Transmitter (The_Answer_Message, The_Connection_Data); Communication.Disconnection (The_Connection_Data); Text_Io.Put_Line ("Reponse Envoyee"); end Send_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; Continue_Orb : Boolean := True; begin while Continue_Orb loop accept Ok_Message_Is_Receive (The_Message : in Message.Type_Of_Message) do Text_Io.Put_Line ("T_Orb : case"); case The_Message.The_Command is when The_Registration => Text_Io.Put_Line ("essai registration"); Is_Ok := Orb_Registration (The_Message.The_Host_Machine_Send, The_Message.The_Socket_Send); if Is_Ok then Text_Io.Put_Line ("T_Orb Registration Ok"); else Text_Io.Put_Line ("T_Orb Registration not Ok"); end if; when The_Unregistration => Text_Io.Put_Line ("essai unregistration"); Is_Ok := Orb_Unregistration (The_Message.The_Host_Machine_Send, The_Message.The_Socket_Send); if Is_Ok then Text_Io.Put_Line ("T_Orb UnRegistration Ok"); else Text_Io.Put_Line ("T_Orb UnRegistration not Ok"); end if; when The_Query => null; when The_Request => Orb_Request (The_Message, Our_Constantes.The_Orb_Connection); Send_Answer (The_Message.Number_Of_The_Question, The_Message.The_Host_Machine_Send, The_Message.The_Socket_Send, Our_Constantes.The_Orb_Connection); when The_Notification => Orb_Notification (The_Message.The_Host_Machine_Send, The_Message.The_Socket_Send, The_Message.Data, Our_Constantes.The_Orb_Connection); Send_Answer (The_Message.Number_Of_The_Question, The_Message.The_Host_Machine_Send, The_Message.The_Socket_Send, Our_Constantes.The_Orb_Connection); when The_Forward => Orb_Forward (The_Message, Our_Constantes.The_Orb_Connection); Send_Answer (The_Message.Number_Of_The_Question, The_Message.The_Host_Machine_Send, The_Message.The_Socket_Send, Our_Constantes.The_Orb_Connection); when The_Publication => null; when The_Unpublication => null; when The_Subscription => Is_Ok := Orb_Subscription (The_Message.The_Host_Machine_Send, The_Message.The_Socket_Send, The_Spy_Number); if Is_Ok then Text_Io.Put_Line ("T_Orb Subscription Ok"); else Text_Io.Put_Line ("T_Orb Subscription not Ok"); end if; Send_Answer (The_Message.Number_Of_The_Question, The_Message.The_Host_Machine_Send, The_Message.The_Socket_Send, Our_Constantes.The_Orb_Connection); when The_Unsubscription => Is_Ok := Orb_Unsubscription (The_Message.The_Host_Machine_Send, The_Message.The_Socket_Send, The_Spy_Number); if Is_Ok then Text_Io.Put_Line ("T_Orb Unsubscription Ok"); else Text_Io.Put_Line ("T_Orb Unsubscription not Ok"); end if; Send_Answer (The_Message.Number_Of_The_Question, The_Message.The_Host_Machine_Send, The_Message.The_Socket_Send, Our_Constantes.The_Orb_Connection); when The_Filtration => null; when The_Unfiltration => null; 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; Continue_Receiver : Boolean := True; begin while Continue_Receiver loop Text_Io.Put_Line ("T_Receive : reception ... "); Communication.Connection_Receiver (The_Orb.The_Socket, The_Orb_Connection); Communication.Receiver (The_Message, The_Orb_Connection); Communication.Disconnection (The_Orb_Connection); Text_Io.Put_Line ("T_Receive : 1 Message est recu"); Orb_Task.Ok_Message_Is_Receive (The_Message); end loop; end Orb_Receiver_Task; -- ********************************************* begin null; end The_Orb_Package;
nblk1=15 nid=2 hdr6=26 [0x00] rec0=23 rec1=00 rec2=01 rec3=066 [0x01] rec0=17 rec1=00 rec2=03 rec3=066 [0x02] rec0=1b rec1=00 rec2=13 rec3=054 [0x03] rec0=1b rec1=00 rec2=12 rec3=01e [0x04] rec0=20 rec1=00 rec2=04 rec3=00a [0x05] rec0=15 rec1=00 rec2=07 rec3=012 [0x06] rec0=1b rec1=00 rec2=11 rec3=05e [0x07] rec0=1a rec1=00 rec2=08 rec3=03c [0x08] rec0=1d rec1=00 rec2=15 rec3=02a [0x09] rec0=1c rec1=00 rec2=06 rec3=00c [0x0a] rec0=22 rec1=00 rec2=0f rec3=004 [0x0b] rec0=17 rec1=00 rec2=10 rec3=00a [0x0c] rec0=1a rec1=00 rec2=05 rec3=006 [0x0d] rec0=13 rec1=00 rec2=0e rec3=060 [0x0e] rec0=11 rec1=00 rec2=14 rec3=04e [0x0f] rec0=15 rec1=00 rec2=0d rec3=056 [0x10] rec0=11 rec1=00 rec2=0b rec3=07a [0x11] rec0=21 rec1=00 rec2=0a rec3=02c [0x12] rec0=0b rec1=00 rec2=0c rec3=000 [0x13] rec0=17 rec1=00 rec2=0c rec3=000 [0x14] rec0=17 rec1=00 rec2=0c rec3=000 tail 0x2175f93dc87bd478fcd5d 0x42a00088462060003 Free Block Chain: 0x2: 0000 00 09 03 fc 80 35 20 20 20 20 20 20 54 68 65 5f ┆ 5 The_┆ 0x9: 0000 00 00 03 cf 80 03 72 69 63 03 00 47 20 20 20 20 ┆ ric G ┆