|
|
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: T V
Length: 9946 (0x26da)
Types: TextFile
Names: »V«
└─⟦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 Runtime_Ids;
with System;
package Message_Queues is
type Upper_Part is range 0 .. 2 ** 16 - 1;
type Lower_Part is new Integer;
type Id is
record
Upper : Upper_Part;
Lower : Lower_Part;
end record;
-- The representation for Id should be private, but the declaration of
-- Null_Id is a forcing occurance for determining the representation.
for Id use
record at mod 2;
Upper at 0 range 0 .. 15;
Lower at 2 range 0 .. 31;
end record;
subtype Name is String (1 .. 8);
-- must be terminated by Ascii.Nul
type Message_Id is range 0 .. 2 ** 16 - 1;
Null_Message : constant Message_Id := 0;
type Associated_Data is new Integer;
subtype Queue_Length is Natural range 0 .. 2 ** 15 - 1;
subtype Message_Size is Natural range 0 .. 2 ** 15 - 1;
subtype Wait_List_Index is Natural range 0 .. 2 ** 15 - 1;
type Wait_Item is
record
Wait_Queue : Id;
Not_Active : Boolean;
Ipc_Queue : Boolean;
end record;
type Wait_List is array (Wait_List_Index range <>) of Wait_Item;
-- type Status is (Successful, Invalid_Queue, Illegal_Parameter,
-- Initiation_Error, Illegal_Channel, No_Message_Found,
-- Queue_Not_Accessible, Too_Many_Requests,
-- Initiation_Failure, Queue_Full, No_Waiter, Message_Too_Big,
-- Buffer_Too_Small, Multiple_Waiters, Invalid_Wait_Set,
-- No_Message_For_Wait_Set, Delete_Queue_With_Waiter,
-- Multiply_Defined_Queue, Memory_Unavailable, Queue_Not_Empty,
-- Channel_Resource_Error, Too_Few_Channel_Slots);
--
-- Use Stratus instead of Status to avoid overhead of enum image table.
subtype Stratus is Integer;
Q_Success : constant := 16#0000#;
Q_Illque : constant := 16#100B#;
Q_Illpar : constant := 16#100C#;
Q_Initerr : constant := 16#100D#;
Q_Illcha : constant := 16#100E#;
Q_Nomess : constant := 16#100F#;
Q_Notacc : constant := 16#1010#;
Q_Tomany : constant := 16#1011#;
Q_Infail : constant := 16#1012#;
Q_Full : constant := 16#1014#;
Q_Nowait : constant := 16#1015#;
Q_Toobig : constant := 16#1016#;
Q_Toosmal : constant := 16#101F#;
Q_Mulwait : constant := 16#1029#;
Q_Empws : constant := 16#102A#;
Q_Quesemp : constant := 16#102B#;
Q_Quedel : constant := 16#102C#;
Q_Dubdef : constant := 16#1033#;
Q_Quesiz : constant := 16#1034#;
Q_Notemp : constant := 16#103D#;
Q_Chasiz : constant := 16#1047#;
Q_Toofew : constant := 16#1051#;
\f
procedure Create (Max_Message_Size : Message_Size;
Max_Message_Count : Queue_Length;
Result : out Stratus;
New_Queue : out Id);
procedure Delete (Queue : Id; Result : out Stratus);
procedure Delete_If_Empty (Queue : Id; Result : out Stratus);
procedure Send (Buffer : System.Address;
Size : Message_Size;
Queue : Id;
Result : out Stratus;
Handle : out Message_Id);
procedure Conditional_Send (Buffer : System.Address;
Size : Message_Size;
Queue : Id;
Result : out Stratus;
Handle : out Message_Id);
procedure Send_Without_Priority (Value : Integer; Queue : Id);
procedure Wait (On_List : System.Address;
Maximum : Wait_List_Index;
Available : out Wait_List_Index);
procedure Wait_Nonblocking (On_List : System.Address;
Maximum : Wait_List_Index;
Result : out Stratus;
Available : out Wait_List_Index);
procedure Retrieve_Message (From_Queue : Id;
To_Buffer : System.Address;
Buffer_Size : Message_Size);
procedure Retrieve_If_Available (From_Queue : Id;
To_Buffer : System.Address;
Buffer_Size : Message_Size;
Result : out Stratus);
procedure Remove_Message (From_Queue : Id;
Remove_Id : Message_Id;
Result : out Stratus);
procedure Length (Of_Queue : Id;
Result : out Stratus;
Count : out Queue_Length);
procedure Get_Associated_Data (For_Queue : Id;
Result : out Stratus;
Data : out Associated_Data);
private
for Wait_Item use
record at mod 2;
Not_Active at 0 range 0 .. 0;
Ipc_Queue at 1 range 7 .. 7;
Wait_Queue at 2 range 0 .. 47;
end record;
pragma Pack (Wait_List);
-- for Status use (Successful => Q_Success,
-- Invalid_Queue => Q_Illque,
-- Illegal_Parameter => Q_Illpar,
-- Initiation_Error => Q_Initerr,
-- Illegal_Channel => Q_Illcha,
-- No_Message_Found => Q_Nomess,
-- Queue_Not_Accessible => Q_Notacc,
-- Too_Many_Requests => Q_Tomany,
-- Initiation_Failure => Q_Infail,
-- Queue_Full => Q_Full,
-- No_Waiter => Q_Nowait,
-- Message_Too_Big => Q_Toobig,
-- Buffer_Too_Small => Q_Toosmal,
-- Multiple_Waiters => Q_Mulwait,
-- Invalid_Wait_Set => Q_Empws,
-- No_Message_For_Wait_Set => Q_Quesemp,
-- Delete_Queue_With_Waiter => Q_Quedel,
-- Multiply_Defined_Queue => Q_Dubdef,
-- Memory_Unavailable => Q_Quesiz,
-- Queue_Not_Empty => Q_Notemp,
-- Channel_Resource_Error => Q_Chasiz,
-- Too_Few_Channel_Slots => Q_Toofew);
pragma Interface (Asm, Create);
pragma Import_Procedure (Create, "__MSGQ$CREATE",
Mechanism => (Value, Value, Value, Reference));
pragma Interface (Asm, Delete);
pragma Import_Procedure (Delete, "__MSGQ$DELETE",
Mechanism => (Reference, Value));
pragma Interface (Asm, Delete_If_Empty);
pragma Import_Procedure (Delete_If_Empty, "__MSGQ$DELETE$VEREMP",
Mechanism => (Reference, Value));
pragma Interface (Asm, Send);
pragma Import_Procedure
(Send, "__MSGQ$SEND",
Mechanism => (Value, Value, Reference, Value, Value));
pragma Interface (Asm, Conditional_Send);
pragma Import_Procedure
(Conditional_Send, "__MSGQ$SEND$RETRDY",
Mechanism => (Value, Value, Reference, Value, Value));
pragma Interface (Asm, Send_Without_Priority);
pragma Import_Procedure
(Send_Without_Priority, "__MSGQ$SEND$NOPRI",
Mechanism => (Value, Reference));
pragma Interface (Asm, Wait);
pragma Import_Procedure (Wait, "__MSGQ$WAIT",
Mechanism => (Value, Value, Value));
pragma Interface (Asm, Wait_Nonblocking);
pragma Import_Procedure (Wait_Nonblocking, "__MSGQ$WAIT$NONBLK",
Mechanism => (Value, Value, Value, Value));
pragma Interface (Asm, Retrieve_Message);
pragma Import_Procedure
(Retrieve_Message, "__MSGQ$RETRIEV",
Mechanism => (Reference, Value, Value));
pragma Interface (Asm, Retrieve_If_Available);
pragma Import_Procedure
(Retrieve_If_Available, "__MSGQ$RETRIEV_IF_AVAILABLE",
Mechanism => (Reference, Value, Value, Value));
pragma Interface (Asm, Remove_Message);
pragma Import_Procedure (Remove_Message, "__MSGQ$REMOVE",
Mechanism => (Reference, Value, Value));
pragma Interface (Asm, Length);
pragma Import_Procedure (Length, "__MSGQ$LENGTH",
Mechanism => (Reference, Value, Value));
pragma Interface (Asm, Get_Associated_Data);
pragma Import_Procedure (Get_Associated_Data, "__MSGQ$GET_ASSOCIATED_DATA",
Mechanism => (Reference, Value, Value));
end Message_Queues;
pragma Export_Elaboration_Procedure ("__MESSAGE_QUEUE_SPEC_ELAB");
pragma Runtime_Unit (Unit_Number => Runtime_Ids.Runtime_Compunit,
Elab_Routine_Number => Runtime_Ids.Internal);