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

⟦da5663458⟧ TextFile

    Length: 4401 (0x1131)
    Types: TextFile
    Names: »V«

Derivation

└─⟦516dceb10⟧ Bits:30000751 8mm tape, Rational 1000, RCI_VADS
    └─ ⟦9a14c9417⟧ »DATA« 
        └─⟦this⟧ 

TextFile

-- Copyright 1988 Verdix Corporation

------------------------------------------------------------------------------
-- User interface to the counting semaphore data structures and subprograms
------------------------------------------------------------------------------
WITH V_I_Types;
WITH V_I_Sema;
WITH System;
USE System;
PACKAGE V_I_Csema IS

   PRAGMA Suppress (All_Checks);
   PRAGMA Suppress (Exception_Tables);
   PRAGMA Not_Elaborated;

   SUBTYPE Semaphore_Rec IS V_I_Sema.Semaphore_Rec;
   SUBTYPE Intr_Status_T IS V_I_Types.Intr_Status_T;
   Disable_Intr_Status : CONSTANT Intr_Status_T :=
      V_I_Types.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
      RECORD
         Enter_S      : Semaphore_Rec;
         Wait_S       : Semaphore_Rec;
         Resume_Entry : System.Address;
         Intr_Flag    : Boolean;
         Intr_Status  : Intr_Status_T;
         Count        : Integer;
         Deleted_Flag : Boolean;
      END RECORD;
   TYPE A_Cnt_Sema_T IS ACCESS Cnt_Sema_Record_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.
   --------------------------------------------------------------------------
   FUNCTION Create (Initial_Count : Integer       := 1;
                    Intr_Flag     : Boolean       := False;
                    Intr_Status   : Intr_Status_T := Disable_Intr_Status)
                   RETURN A_Cnt_Sema_T;

   --------------------------------------------------------------------------
   -- 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.
   --------------------------------------------------------------------------
   FUNCTION Delete (Cnt_Sema : A_Cnt_Sema_T; Conditional_Delete_Flag : Boolean)
                   RETURN Boolean;

   --------------------------------------------------------------------------
   -- 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    	    - returns when count > 0. This may necessitate
   --                    suspension of current task until another task
   --                    signals.
   --  = 0.0     	    - 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;

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

PRIVATE
   PRAGMA Interface (Ada, Create);
   PRAGMA Interface_Name (Create, "__CREATE_COUNT_SEMAPHORE");
   PRAGMA Interface (Ada, Delete);
   PRAGMA Interface_Name (Delete, "__DELETE_COUNT_SEMAPHORE");
   PRAGMA Interface (Ada, Wait);
   PRAGMA Interface_Name (Wait, "__WAIT_COUNT_SEMAPHORE");
   PRAGMA Interface (Ada, Signal);
   PRAGMA Interface_Name (Signal, "__SIGNAL_COUNT_SEMAPHORE");
END V_I_Csema;