|
|
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: 18432 (0x4800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Little_Orb, seg_05706a
└─⟦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 Communication;
with Message;
with Our_Constantes;
use Our_Constantes;
with Our_String;
with Text_Io;
with Run;
package body Little_Orb is
The_Host_Machine : Transport_Defs.Host_Id (1 .. 4) := (0, 0, 0, 0);
The_Socket_Machine : Transport_Defs.Socket_Id (1 .. 2) := (0, 0);
The_Id_Machine : Id_Object.Type_Id := 0;
The_Connection_Machine : Connection_Data;
Is_The_End : Boolean := False;
Exist_A_Machine : Boolean := False;
-- ========================
task Is_Publication_Ok is
entry Publication_Ok;
end Is_Publication_Ok;
-- *********************************************
procedure Registration (The_Id : out Id_Object.Type_Id) is
The_Message : Message.Type_Of_Message;
--The_Connection : Connection_Data;
begin
if not Exist_A_Machine then
Text_Io.Put_Line ("envoi une demade de registration a l'orb");
The_Message.The_Command := The_Registration;
Communication.Open_Transmit (The_Message, The_Connection_Machine);
-- recuperation des parametres
-- ===========================
The_Host_Machine := The_Message.The_Host_Machine_Send;
The_Socket_Machine := The_Message.The_Socket_Send;
Communication.Connect_Transmit
(The_Message, The_Connection_Machine);
Communication.Transmitter (The_Message, The_Connection_Machine);
Communication.Disconnect (The_Connection_Machine);
The_Message.The_Host_Machine_Receive := The_Host_Machine;
The_Message.The_Socket_Receive := The_Socket_Machine;
The_Message.The_Host_Machine_Send := The_Orb.The_Host;
The_Message.The_Socket_Send := The_Orb.The_Socket;
-- reception de l'Identificateur de machine
-- ========================================
Text_Io.Put ("attente acquittement de l'orb");
Communication.Connect_Receive (The_Connection_Machine);
Communication.Receiver (The_Message, The_Connection_Machine);
Communication.Disconnect (The_Connection_Machine);
The_Id_Machine := The_Message.The_Id_User_Send;
The_Id := The_Message.The_Id_User_Send;
Exist_A_Machine := True;
end if;
end Registration;
-- *********************************************
procedure Unregistration
(The_Id : Id_Object.Type_Id; Is_Ok : out Boolean) is
The_Message : Message.Type_Of_Message;
The_Connection : Connection_Data;
begin
The_Message.The_Command := The_Unregistration;
The_Message.The_Id_User_Send := The_Id;
The_Message.The_Socket_Send := (0, 0);
-- envoi de la commande a l'orb
-- ============================
Text_Io.Put_Line ("envoi d'une demande d'unregistration de l'object ");
Text_Io.Put (Natural'Image (Natural (The_Id)));
Text_Io.Put_Line (" a l'orb");
Communication.Open_Transmit (The_Message, The_Connection);
Communication.Connect_Transmit (The_Message, The_Connection);
Communication.Transmitter (The_Message, The_Connection);
Communication.Disconnect (The_Connection);
The_Message.The_Host_Machine_Receive :=
The_Message.The_Host_Machine_Send;
The_Message.The_Socket_Receive := The_Message.The_Socket_Send;
-- attente reponse de l'orb
-- ========================
Text_Io.Put ("attente acquittement de l'orb");
Communication.Connect_Receive (The_Connection);
Communication.Receiver (The_Message, The_Connection);
Communication.Disconnect (The_Connection);
Communication.Close (The_Connection);
if The_Message.Command_Is_Ok then
Text_Io.Put_Line ("Ok");
else
Text_Io.Put_Line ("Erreur");
end if;
Is_Ok := The_Message.Command_Is_Ok;
end Unregistration;
-- *********************************************
procedure Publication (The_Name : String;
The_Id : Id_Object.Type_Id;
Is_Ok : out Boolean) is
The_Message : Message.Type_Of_Message;
The_Connection : Connection_Data;
begin
The_Message.The_Command := The_Publication;
The_Message.Data := Our_String.Value (The_Name);
The_Message.The_Id_User_Send := The_Id;
The_Message.The_Host_Machine_Send := The_Host_Machine;
The_Message.The_Socket_Send := The_Socket_Machine;
Text_Io.Put_Line ("envoi d'une demande a l'orb de publication de ");
Text_Io.Put (The_Name);
Text_Io.Put (" sur l'object ");
Text_Io.Put (Natural'Image (Natural (The_Id)));
Text_Io.New_Line;
Communication.Connect_Transmit (The_Message, The_Connection_Machine);
Communication.Transmitter (The_Message, The_Connection_Machine);
Communication.Disconnect (The_Connection_Machine);
-- acquittement
-- ============
Text_Io.Put ("attente acquittement de l'orb");
Communication.Connect_Receive (The_Connection_Machine);
Communication.Receiver (The_Message, The_Connection_Machine);
Communication.Disconnect (The_Connection_Machine);
if The_Message.Command_Is_Ok then
Text_Io.Put_Line ("publication ok");
end if;
Is_Ok := The_Message.Command_Is_Ok;
end Publication;
-- ***************************************
procedure End_Of_Publication is
begin
Is_Publication_Ok.Publication_Ok;
end End_Of_Publication;
-- *********************************************
procedure Unpublication (Is_Ok : out Boolean;
The_Name : String;
The_Id : Id_Object.Type_Id := 0) is
The_Message : Message.Type_Of_Message;
The_Connection : Connection_Data;
begin
The_Message.The_Command := The_Unpublication;
The_Message.Data := Our_String.Value (The_Name);
The_Message.The_Id_User_Send := The_Id;
The_Message.The_Socket_Send := (0, 0);
Text_Io.Put_Line ("envoi d'une demande a l'orb d'unpublication de ");
Text_Io.Put (The_Name);
Text_Io.Put (" sur l'object ");
Text_Io.Put (Natural'Image (Natural (The_Id)));
Text_Io.New_Line;
Communication.Open_Transmit (The_Message, The_Connection);
Communication.Connect_Transmit (The_Message, The_Connection);
Communication.Transmitter (The_Message, The_Connection);
Communication.Disconnect (The_Connection);
-- acquittement
-- ============
Text_Io.Put ("attente acquittement de l'orb");
Communication.Connect_Receive (The_Connection);
Communication.Receiver (The_Message, The_Connection);
Communication.Disconnect (The_Connection);
Communication.Close (The_Connection);
Is_Ok := The_Message.Command_Is_Ok;
end Unpublication;
-- *********************************************
procedure Request (The_Answer : out String;
Is_Ok : out Boolean;
The_Name : String;
The_Id : Id_Object.Type_Id := 0) is
The_Message : Message.Type_Of_Message;
Do_Exist_Command : Boolean := False;
The_Connection : Connection_Data;
--The_Return_Answer : String (1 .. Our_Constantes.Length_Of_A_Line);
begin
if not Exist_A_Machine then
Text_Io.Put ("envoi d'une demande de request sur la fonction ");
Text_Io.Put (The_Name);
Text_Io.New_Line;
Communication.Open_Transmit (The_Message, The_Connection);
The_Message.Data := Our_String.Value (The_Name);
The_Message.The_Id_User_Receive := The_Id;
The_Message.The_Command := The_Request;
Communication.Connect_Transmit (The_Message, The_Connection);
Communication.Transmitter (The_Message, The_Connection);
Communication.Disconnect (The_Connection);
-- acquittement
-- ============
Text_Io.Put ("attente acquittement de l'orb");
Communication.Connect_Receive (The_Connection);
Communication.Receiver (The_Message, The_Connection);
Communication.Disconnect (The_Connection);
Communication.Close (The_Connection);
Do_Exist_Command := The_Message.Command_Is_Ok;
if Do_Exist_Command then
Text_Io.Put ("la fonction ");
Text_Io.Put (The_Name);
Text_Io.Put_Line (" existe");
The_Answer := Our_String.Image (The_Message.Data)
(The_Answer'First .. The_Answer'Last);
else
-- Reponse nulle
Text_Io.Put ("la fonction ");
Text_Io.Put (The_Name);
Text_Io.Put_Line (" n'existe pas");
for I in The_Answer'First .. The_Answer'Last loop
The_Answer (I) := '_';
end loop;
end if;
Is_Ok := Do_Exist_Command;
end if;
end Request;
-- ========================
task Return_Task is
entry Ok_Return (A_Message : Message.Type_Of_Message;
A_Answer : Our_String.Variable_String);
entry Ok_End;
end Return_Task;
-- =============================
task Run_Task is
entry Ok_Message_Is_Received (A_Message : in Message.Type_Of_Message);
end Run_Task;
-- =============================
task body Is_Publication_Ok is
The_Message : Message.Type_Of_Message;
begin
accept Publication_Ok;
loop
Text_Io.Put_Line ("attente demande de fonction");
Communication.Connect_Receive (The_Connection_Machine);
Communication.Receiver (The_Message, The_Connection_Machine);
Communication.Disconnect (The_Connection_Machine);
Text_Io.Put_Line ("un message est recu");
Run_Task.Ok_Message_Is_Received (The_Message);
-- si il n'y a plus de machine on sort
-- ===================================
if Is_The_End then
exit;
end if;
end loop;
end Is_Publication_Ok;
-- =============================
task body Run_Task is
The_Answer : Our_String.Variable_String;
begin
loop
accept Ok_Message_Is_Received
(A_Message : in Message.Type_Of_Message) do
case A_Message.The_Command is
when The_Request =>
Text_Io.Put_Line ("lancement de la fonction ");
Text_Io.Put (Our_String.Image (A_Message.Data)
(1 .. Length_Of_Contract_Name));
Text_Io.Put_Line (" en cours");
-- appel de la procedure de traitement
-- ===================================
Run.Treatment
(Our_String.Image (A_Message.Data)
(1 .. Length_Of_Contract_Name), The_Answer);
-- retour de la reponse
-- ====================
Text_Io.Put_Line ("traitement effectue");
Return_Task.Ok_Return (A_Message, The_Answer);
when The_Unregistration =>
Text_Io.Put ("unregistration en cours de l'object ");
Text_Io.Put (Natural'Image (Natural (The_Id_Machine)));
Is_The_End := True;
Return_Task.Ok_End;
Text_Io.Put_Line ("finie");
when others =>
null;
end case;
end Ok_Message_Is_Received;
-- si il n'y a plus de contract on sort
-- ====================================
if Is_The_End then
exit;
end if;
end loop;
end Run_Task;
-- =============================
task body Return_Task is
The_Message : Message.Type_Of_Message;
begin
loop
select
accept Ok_Return (A_Message : Message.Type_Of_Message;
A_Answer : Our_String.Variable_String) do
Text_Io.Put_Line ("renvoi de la reponse a l'orb");
The_Message.Data := A_Answer;
The_Message.The_Host_Machine_Receive :=
A_Message.The_Host_Machine_Send;
The_Message.The_Socket_Receive := A_Message.The_Socket_Send;
Communication.Connect_Transmit
(The_Message, The_Connection_Machine);
Communication.Transmitter
(The_Message, The_Connection_Machine);
Communication.Disconnect (The_Connection_Machine);
end Ok_Return;
or
accept Ok_End do
null; --
end Ok_End;
end select;
if Is_The_End then
exit;
end if;
end loop;
end Return_Task;
end Little_Orb;
nblk1=11
nid=f
hdr6=20
[0x00] rec0=21 rec1=00 rec2=01 rec3=038
[0x01] rec0=15 rec1=00 rec2=07 rec3=03e
[0x02] rec0=19 rec1=00 rec2=03 rec3=07a
[0x03] rec0=02 rec1=00 rec2=10 rec3=04c
[0x04] rec0=1a rec1=00 rec2=09 rec3=012
[0x05] rec0=19 rec1=00 rec2=0a rec3=068
[0x06] rec0=1f rec1=00 rec2=06 rec3=022
[0x07] rec0=1a rec1=00 rec2=04 rec3=030
[0x08] rec0=19 rec1=00 rec2=11 rec3=056
[0x09] rec0=17 rec1=00 rec2=08 rec3=008
[0x0a] rec0=1e rec1=00 rec2=0e rec3=01c
[0x0b] rec0=01 rec1=00 rec2=0c rec3=006
[0x0c] rec0=1c rec1=00 rec2=05 rec3=022
[0x0d] rec0=0f rec1=00 rec2=0d rec3=08c
[0x0e] rec0=1d rec1=00 rec2=0b rec3=054
[0x0f] rec0=1b rec1=00 rec2=02 rec3=000
[0x10] rec0=00 rec1=00 rec2=00 rec3=000
tail 0x21763ab9287c594426c3e 0x42a00088462060003
Free Block Chain:
0xf: 0000 00 00 00 1e 80 1b 72 69 6e 67 20 28 31 20 2e 2e ┆ ring (1 ..┆