|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 4299 (0x10cb)
Types: TextFile
Names: »B«
└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
└─⟦77aa8350c⟧ »DATA«
└─⟦f794ecd1d⟧
└─⟦24d1ddd49⟧
└─⟦this⟧
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1988 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054-3197
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1988. ALL RIGHTS RESERVED.
--
--
with Exceptions;
with Message_Queues;
with Process_Ops;
with Runtime_Error;
with Timer;
package body Sequential_Ops is
pragma Suppress_All;
package Mq renames Message_Queues;
package Re renames Runtime_Error;
use Re.Values;
Initialized : Boolean;
pragma Import_Object (Initialized, "__SEQ_INITIALIZED");
Wait_Item : Mq.Wait_Item;
pragma Import_Object (Wait_Item, "__SEQ_WAIT_ITEM");
Timer_Msg_Bytes : constant := Timer.Timeout_Message'Size / 8;
procedure Initialize is
pragma Routine_Number (Runtime_Ids.Internal);
Status : Mq.Stratus;
begin
Wait_Item.Not_Active := False;
Mq.Create (Max_Message_Size => Timer_Msg_Bytes,
Max_Message_Count => 1,
Result => Status,
New_Queue => Wait_Item.Wait_Queue);
case Status is
when Mq.Q_Success =>
null;
when Mq.Q_Quesiz =>
raise Storage_Error;
when others =>
raise Exceptions.Runtime_Error;
end case;
Initialized := True;
end Initialize;
procedure Delay_Statement (For_Duration : Duration) is
pragma Routine_Number (Runtime_Ids.Internal);
T_Status : Timer.Stratus;
Ignored : Timer.Id;
Available : Mq.Wait_List_Index;
Sent_Signal : constant Timer.Timeout_Message := 4567;
Received_Signal : Timer.Timeout_Message;
begin
if For_Duration <= 0.0 then
return;
end if;
if not Initialized then
Initialize;
end if;
Timer.Start (Time => For_Duration,
Queue => Wait_Item.Wait_Queue,
Signal => Sent_Signal,
Result => T_Status,
Handle => Ignored);
case T_Status is
when Timer.Ti_Success =>
null;
when Timer.Ti_Nofrte =>
raise Storage_Error;
when others =>
raise Exceptions.Runtime_Error;
end case;
Mq.Wait (Wait_Item'Address, 1, Available);
if (Available /= 1) then
raise Exceptions.Runtime_Error;
end if;
Mq.Retrieve_Message (Wait_Item.Wait_Queue, Received_Signal'Address,
Timer_Msg_Bytes);
if (Received_Signal /= Sent_Signal) then
raise Exceptions.Runtime_Error;
end if;
end Delay_Statement;
procedure Finalize is
pragma Routine_Number (Runtime_Ids.Internal);
Status : Mq.Stratus;
begin
if Initialized then
Mq.Delete (Wait_Item.Wait_Queue, Status);
if Status /= Mq.Q_Success then
raise Exceptions.Runtime_Error;
end if;
end if;
end Finalize;
procedure Handle_Signal (Signal_Code : Integer) is
pragma Routine_Number (Runtime_Ids.Internal);
begin
Re.Issue (Abort_Signal_Received_By_Program);
Finalize;
Process_Ops.Suicide;
end Handle_Signal;
begin
Initialized := False;
end Sequential_Ops;
pragma Export_Elaboration_Procedure ("__SEQUENTIAL_OPS_BODY_ELAB");
pragma Runtime_Unit (Unit_Number => Runtime_Ids.Runtime_Compunit,
Elab_Routine_Number => Runtime_Ids.Internal);