|
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: 5120 (0x1400) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Producer_A, seg_020b31
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧
with Producer_A_Messages; with Mail; procedure Producer_A is use Producer_A_Messages.Predefined_Ops; Unexpected_Message : exception; Poor_Reply : exception; Out_Message : Producer_A_Messages.Message := 99; Priority : Mail.Priority := Mail.Priority (1); Box : Mail.Mailbox := Mail.Look_Up ("consumer1"); Local_Mailbox : Mail.Mailbox := Mail.Look_Up ("producer_a"); Boxes : Mail.List; Trans_Id : Mail.Transaction_Id; procedure Process_Type_A_Reply (R : Producer_A_Messages.Reply) is begin if Integer (R) /= Integer (Out_Message + 1) then raise Poor_Reply; end if; end Process_Type_A_Reply; procedure Process_Incoming_Messages (M : Mail.Raw_Message) is begin if Mail.Is_A_Reply (M) then case Mail.Get_Kind (M) is when Producer_A_Messages.Reply_Kind => Process_Type_A_Reply (Producer_A_Messages.Reply_Op.Receive (M)); when others => null; end case; else raise Unexpected_Message; end if; end Process_Incoming_Messages; procedure Increment (M : in out Producer_A_Messages.Message) is begin M := M + 1; end Increment; begin -- construct list of mailboxes for multicast Mail.Add (Box, Boxes); Mail.Add (Box => Mail.Look_Up ("consumer2"), To => Boxes); Mail.Add (Box => Mail.Look_Up ("consumer3"), To => Boxes); for I in 1 .. 500 loop -------------------------------------------------- -- issue all types of sends -------------------------------------------------- Producer_A_Messages.Op.Send_With_Delivery_Completion (Out_Message, Priority, Box); -- construct new message Increment (Out_Message); -- blocked send with application reply Process_Type_A_Reply (Producer_A_Messages.Reply_Op. Send_Blocked_With_Application_Reply (The_Message => Out_Message, Message_Priority => Priority, Destination => Box)); -- construct new message Increment (Out_Message); -- send a nonblocked msg with a reply Trans_Id := Producer_A_Messages.Reply_Op. Send_Nonblocked_With_Application_Reply (The_Message => Out_Message, Message_Priority => Priority, Source => Local_Mailbox, Destination => Box); -- do some processing null; -- wait for reply Process_Incoming_Messages (Mail.Wait (Box => Local_Mailbox)); -- construct new message Increment (Out_Message); Producer_A_Messages.Op.Multicast (The_Message => Out_Message, Message_Priority => Priority, Destinations => Boxes); -- construct new message Increment (Out_Message); Producer_A_Messages.Op.Broadcast (The_Message => Out_Message, Message_Priority => Priority); -- construct new message Increment (Out_Message); end loop; end Producer_A;
nblk1=4 nid=0 hdr6=8 [0x00] rec0=1f rec1=00 rec2=01 rec3=052 [0x01] rec0=23 rec1=00 rec2=02 rec3=014 [0x02] rec0=1b rec1=00 rec2=03 rec3=038 [0x03] rec0=10 rec1=00 rec2=04 rec3=000 tail 0x2151c7dda838d446da785 0x42a00088462060003