DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

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

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦a26204da4⟧ Ada Source

    Length: 7168 (0x1c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package V_I_Csema, seg_04b9aa

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



-- Copyright 1988, 1992 Verdix Corporation

------------------------------------------------------------------------------
-- User interface to the counting semaphore data structures and subprograms
--
-- Provides backward compatibility with earlier releases of VADS.
--
-- The interface to ALL the low kernel services is now provided in
-- ada_krn_i.a. Types used by these services is defined in ada_krn_defs.a.
--
-- This package simply layers upon the counting semaphore data structures and
-- subprograms found in ada_krn_defs.a and ada_krn_i.a.
--
-- Differences from earlier releases:
--  [1] The intr_flag and intr_status are only applicable to the
--      VADS_MICRO.
--  [2] For the delete() service, if the conditional_delete_flag is TRUE,
--      the semaphore might not be deleted even though no tasks are
--      waiting on it. This caveat isn't applicable to the VADS_MICRO.
------------------------------------------------------------------------------
with Ada_Krn_Defs;
with Ada_Krn_I;
package V_I_Csema is

    pragma Suppress (All_Checks);
    pragma Suppress (Exception_Tables);
    pragma Not_Elaborated;

    type Intr_Status_T is new Ada_Krn_Defs.Intr_Status_T;
--    DISABLE_INTR_STATUS\x09: constant intr_status_t :=
--\x09\x09intr_status_t(ada_krn_defs.DISABLE_INTR_STATUS);
    function Disable_Intr_Status return Intr_Status_T;
    pragma Inline_Only (Disable_Intr_Status);

    -- Predefined wait_time values
    Wait_Forever : constant Duration := -1.0;
    Do_Not_Wait : constant Duration := 0.0;

    --------------------------------------------------------------------------
    -- Counting semaphore data structure
    --------------------------------------------------------------------------
    type Cnt_Sema_Record_T is new Ada_Krn_Defs.Count_Semaphore_T;
    type A_Cnt_Sema_T is new Ada_Krn_Defs.A_Count_Semaphore_T;

    --------------------------------------------------------------------------
    -- Create a new counting semaphore.
    --
    -- Normally, the critical region for updating the semaphore's
    -- count is protected by a binary semaphore.
    --
    -- However, if the intr_flag is TRUE, then,
    -- its critical region is protected by disabling interrupts. This
    -- allows the counting semaphore to be accessed from an ISR.
    --
    -- STORAGE_ERROR exception is raised if not enough memory for semaphore.
    --
    -- Use of the intr_flag and intr_status fields is only applicable
    -- to the VADS_MICRO.
    --------------------------------------------------------------------------
    function Create (Initial_Count : Integer := 1;
                     Intr_Flag : Boolean := False;
                     Intr_Status : Intr_Status_T := Disable_Intr_Status)
                    return A_Cnt_Sema_T;
    pragma Inline_Only (Create);

    --------------------------------------------------------------------------
    -- Deletes a previously created counting semaphore. Returns TRUE if
    -- deletion was successful.
    --
    -- If conditional_delete_flag parameter is TRUE, then, semaphore
    -- is not deleted if any task is waiting on it.
    -- Otherwise, semaphore is always deleted and waiting tasks
    -- are resumed.
    --
    -- Note: if the conditional_delete_flag is TRUE, the semaphore might not
    -- be deleted even though no tasks are waiting on it. This caveat isn't
    -- applicable to the VADS_MICRO.
    --------------------------------------------------------------------------
    function Delete (Cnt_Sema : A_Cnt_Sema_T; Conditional_Delete_Flag : Boolean)
                    return Boolean;
    pragma Inline_Only (Delete);

    --------------------------------------------------------------------------
    -- Waits on a counting semaphore.
    --
    -- Returns TRUE, if semaphore count > 0. The count is decremented
    -- before returning.
    --
    -- If count <= 0, then, returns according to the wait_time parameter:
    --  < 0.0    \x09    - returns when count > 0. This may necessitate
    --                    suspension of current task until another task
    --                    signals.
    --  = 0.0     \x09    - returns FALSE immediately if count <= 0.
    --  > 0.0           - if count doesn't become positive
    --                    within "wait_time" amount of time, returns FALSE.
    --
    -- Note: returns FALSE for any wait_time, if semaphore was deleted.
    --
    --------------------------------------------------------------------------
    function Wait (Cnt_Sema : A_Cnt_Sema_T; Wait_Time : Duration)
                  return Boolean;
    pragma Inline_Only (Wait);

    --------------------------------------------------------------------------
    -- Signals a counting semaphore.
    --
    -- Increments the semphore's count. If count > 0, resumes next
    -- task waiting on semaphore.
    --------------------------------------------------------------------------
    procedure Signal (Cnt_Sema : A_Cnt_Sema_T);
    pragma Inline_Only (Signal);

end V_I_Csema;

E3 Meta Data

    nblk1=6
    nid=0
    hdr6=c
        [0x00] rec0=16 rec1=00 rec2=01 rec3=00c
        [0x01] rec0=19 rec1=00 rec2=02 rec3=01a
        [0x02] rec0=15 rec1=00 rec2=03 rec3=052
        [0x03] rec0=16 rec1=00 rec2=04 rec3=05a
        [0x04] rec0=14 rec1=00 rec2=05 rec3=064
        [0x05] rec0=06 rec1=00 rec2=06 rec3=001
    tail 0x21750bd528684381f79ca 0x42a00088462060003