DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T V

⟦2ac9b395b⟧ TextFile

    Length: 9946 (0x26da)
    Types: TextFile
    Names: »V«

Derivation

└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
    └─ ⟦77aa8350c⟧ »DATA« 
        └─⟦f794ecd1d⟧ 
            └─⟦24d1ddd49⟧ 
                └─⟦this⟧ 

TextFile

--    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);