|
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: 23552 (0x5c00) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Generic_Comm, seg_057d48
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with Bounded_String; with Byte_Defs; with Byte_String_Io; with Text_Io; package body Generic_Comm is package Bs renames Bounded_String; package Ti renames Text_Io; Packet : V_Packet; task Client is entry Get_Client_Id (Id : out Natural); entry Put_Client_Id (Id : Natural); entry Dispose; entry Send (Type_Message) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1); end Client; procedure Send (Typ : Type_Message; Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) is begin Client.Send (Typ) (Rem_Host, Rem_Socket, Msg, Source, Target, Order); end Send; function Get_Client_Id return Natural is Id : Natural; begin Client.Get_Client_Id (Id); return Id; end Get_Client_Id; procedure Put_Client_Id (Id : Natural) is begin Client.Put_Client_Id (Id); end Put_Client_Id; procedure Dispose is begin Client.Dispose; end Dispose; task Reception is entry Enable_Reception (Delay_Max : Duration); entry Disable_Reception (Delay_Max : Duration); entry Dispose; end Reception; task body Client is Client_Id : Natural := 0; Channel_In : Communication.Object; Done : Boolean; Ok : Boolean; begin loop select when Client_Id /= 0 => accept Get_Client_Id (Id : out Natural) do Id := Client_Id; end Get_Client_Id; or accept Put_Client_Id (Id : Natural) do Client_Id := Id; end Put_Client_Id; or accept Dispose do -- Reception.Dispose; Done := True; end Dispose; or accept Send (Registration) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) do Ti.Put_Line ("-> registration "); Messages.Packaging (Typ => Registration, Content => V_Content (Bs.Value (Msg, Mmax)), Source => Source, Target => Target, Order => Order, Pack => Packet); Reception.Enable_Reception (Delay_Max); end Send; or when Client_Id /= 0 => accept Send (Unregistration) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) do Ti.Put_Line ("-> unregistration"); Messages.Packaging (Typ => Unregistration, Content => V_Content (Bs.Value (Msg, Mmax)), Source => Source, Target => Target, Order => Order, Pack => Packet); Communication.Open_Connection (Channel_In); Communication.Send (Channel_In, Packet, Ficus, Orb_Socket, 11, Delay_Max, Success => Ok); Communication.Close_Connection (Channel_In); Reception.Disable_Reception (Delay_Max); end Send; or when Client_Id /= 0 => accept Send (Query) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) do Ti.Put_Line ("-> query"); Messages.Packaging (Typ => Query, Content => V_Content (Bs.Value (Msg, Mmax)), Source => Source, Target => Target, Order => Order, Pack => Packet); Communication.Open_Connection (Channel_In); Communication.Send (Channel_In, Packet, Ficus, Orb_Socket, 12, Delay_Max, Success => Ok); Communication.Close_Connection (Channel_In); end Send; or when Client_Id /= 0 => accept Send (Publication) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) do Ti.Put_Line ("-> publication"); Messages.Packaging (Typ => Publication, Content => V_Content (Bs.Value (Msg, Mmax)), Source => Source, Target => Target, Order => Order, Pack => Packet); Communication.Open_Connection (Channel_In); Communication.Send (Channel_In, Packet, Ficus, Orb_Socket, 12, Delay_Max, Success => Ok); Communication.Close_Connection (Channel_In); end Send; or when Client_Id /= 0 => accept Send (Request) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) do Ti.Put_Line ("-> request"); Messages.Packaging (Typ => Request, Content => V_Content (Bs.Value (Msg, Mmax)), Source => Source, Target => Target, Order => Order, Pack => Packet); Communication.Open_Connection (Channel_In); Communication.Send (Channel_In, Packet, Ficus, Orb_Socket, 12, Delay_Max, Success => Ok); Communication.Close_Connection (Channel_In); end Send; or when Client_Id /= 0 => accept Send (Forward) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) do Ti.Put_Line ("-> forward"); Messages.Packaging (Typ => Forward, Content => V_Content (Bs.Value (Msg, Mmax)), Source => Source, Target => Target, Order => Order, Pack => Packet); Communication.Open_Connection (Channel_In); Communication.Send (Channel_In, Packet, Ficus, Orb_Socket, 12, Delay_Max, Success => Ok); Communication.Close_Connection (Channel_In); end Send; or when Client_Id /= 0 => accept Send (Unpublication) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) do Ti.Put_Line ("-> unpublication"); Messages.Packaging (Typ => Unpublication, Content => V_Content (Bs.Value (Msg, Mmax)), Source => Source, Target => Target, Order => Order, Pack => Packet); Communication.Open_Connection (Channel_In); Communication.Send (Channel_In, Packet, Ficus, Orb_Socket, 12, Delay_Max, Success => Ok); Communication.Close_Connection (Channel_In); end Send; or when Client_Id /= 0 => accept Send (Subscription) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) do Ti.Put_Line ("-> subscription"); Messages.Packaging (Typ => Subscription, Content => V_Content (Bs.Value (Msg, Mmax)), Source => Source, Target => Target, Order => Order, Pack => Packet); Communication.Open_Connection (Channel_In); Communication.Send (Channel_In, Packet, Ficus, Orb_Socket, 12, Delay_Max, Success => Ok); Communication.Close_Connection (Channel_In); end Send; or when Client_Id /= 0 => accept Send (Unsubscription) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) do Ti.Put_Line ("-> unsubcription"); Messages.Packaging (Typ => Unsubscription, Content => V_Content (Bs.Value (Msg, Mmax)), Source => Source, Target => Target, Order => Order, Pack => Packet); Communication.Open_Connection (Channel_In); Communication.Send (Channel_In, Packet, Ficus, Orb_Socket, 12, Delay_Max, Success => Ok); Communication.Close_Connection (Channel_In); end Send; or when Client_Id /= 0 => accept Send (Filtration) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) do Ti.Put_Line ("-> filtration"); Messages.Packaging (Typ => Filtration, Content => V_Content (Bs.Value (Msg, Mmax)), Source => Source, Target => Target, Order => Order, Pack => Packet); Communication.Open_Connection (Channel_In); Communication.Send (Channel_In, Packet, Ficus, Orb_Socket, 12, Delay_Max, Success => Ok); Communication.Close_Connection (Channel_In); end Send; or when Client_Id /= 0 => accept Send (Unfiltration) (Rem_Host : T_Host_Id := Ficus; Rem_Socket : T_Socket := Orb_Socket; Msg : String := " "; Source : Natural := 0; Target : Natural := 0; Order : Natural := 1) do Ti.Put_Line ("-> unfiltration"); Messages.Packaging (Typ => Unfiltration, Content => V_Content (Bs.Value (Msg, Mmax)), Source => Source, Target => Target, Order => Order, Pack => Packet); Communication.Open_Connection (Channel_In); Communication.Send (Channel_In, Packet, Ficus, Orb_Socket, 12, Delay_Max, Success => Ok); Communication.Close_Connection (Channel_In); end Send; end select; end loop; end Client; task body Reception is Channel_Out, Channel : Communication.Object; Activate : Boolean := False; Done : Boolean := False; Byte_Msg : Byte_String_Io.Byte_String (0 .. Pmax - 1); Counter : Natural; Rec_Msg : Messages.Obj_Msg; Ok : Boolean; begin loop select accept Enable_Reception (Delay_Max : Duration) do Communication.Open_Connection (Channel_Out); Messages.Packaging (Typ => Registration, Content => V_Content (Bs.Value ("******* message registration ********", Mmax)), Pack => Packet); Communication.Open_Connection (Channel); Communication.Send (C => Channel, V_Msg => Packet, R_Host => Ficus, R_Socket => Orb_Socket, Try_Nb => 1, Delaymax => Delay_Max, L_Host => Communication.Get_Local_Host (Channel_Out), L_Socket => Communication.Get_Local_Socket (Channel_Out), Success => Ok); Communication.Close_Connection (Channel); Activate := True; end Enable_Reception; or accept Disable_Reception (Delay_Max : Duration) do Communication.Close_Connection (Channel_Out); Activate := False; Done := True; end Disable_Reception; or accept Dispose; Done := True; else if Activate then Communication.Reception (Delaymax => Delay_Max, Msg => Byte_Msg, Count => Counter, C => Channel_Out); if Counter > 0 then Messages.Unpackaging (Byte_Msg, Counter, Rec_Msg); case Messages.Get_Type_Msg (Rec_Msg) is when Registration => Client.Put_Client_Id (Messages.Get_Source_Id (Rec_Msg)); when others => null; end case; Msg_Bal.Put_Message (Rec_Msg); end if; end if; end select; exit when Done; end loop; end Reception; end Generic_Comm;
nblk1=16 nid=4 hdr6=2a [0x00] rec0=22 rec1=00 rec2=01 rec3=04e [0x01] rec0=26 rec1=00 rec2=10 rec3=042 [0x02] rec0=16 rec1=00 rec2=0a rec3=042 [0x03] rec0=14 rec1=00 rec2=06 rec3=064 [0x04] rec0=08 rec1=00 rec2=02 rec3=068 [0x05] rec0=13 rec1=00 rec2=03 rec3=02a [0x06] rec0=12 rec1=00 rec2=14 rec3=058 [0x07] rec0=13 rec1=00 rec2=15 rec3=050 [0x08] rec0=00 rec1=00 rec2=09 rec3=006 [0x09] rec0=12 rec1=00 rec2=08 rec3=032 [0x0a] rec0=13 rec1=00 rec2=0d rec3=04c [0x0b] rec0=12 rec1=00 rec2=05 rec3=050 [0x0c] rec0=13 rec1=00 rec2=13 rec3=024 [0x0d] rec0=12 rec1=00 rec2=12 rec3=070 [0x0e] rec0=12 rec1=00 rec2=16 rec3=00c [0x0f] rec0=13 rec1=00 rec2=0f rec3=04e [0x10] rec0=12 rec1=00 rec2=07 rec3=05a [0x11] rec0=1b rec1=00 rec2=0c rec3=06c [0x12] rec0=12 rec1=00 rec2=0b rec3=02e [0x13] rec0=15 rec1=00 rec2=0e rec3=046 [0x14] rec0=14 rec1=00 rec2=11 rec3=000 [0x15] rec0=18 rec1=00 rec2=0c rec3=001 tail 0x21765194a87d243ae4e51 0x42a00088462060003 Free Block Chain: 0x4: 0000 00 00 00 04 80 01 20 01 02 03 20 20 20 20 20 20 ┆ ┆