home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
gnat-2.06-src.tgz
/
tar.out
/
fsf
/
gnat
/
ada
/
s-os2~tp.ads
< prev
next >
Wrap
Text File
|
1996-09-28
|
6KB
|
184 lines
------------------------------------------------------------------------------
-- --
-- GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS --
-- --
-- S Y S T E M . T A S K _ P R I M I T I V E S --
-- --
-- S p e c --
-- (OS/2 version) --
-- --
-- $Revision: 1.5 $ --
-- --
-- Copyright (c) 1993,1994,1995 NYU, All Rights Reserved --
-- --
-- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU Library General Public License as published by the --
-- Free Software Foundation; either version 2, or (at your option) any --
-- later version. GNARL is distributed in the hope that it will be use- --
-- ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Gen- --
-- eral Library Public License for more details. You should have received --
-- a copy of the GNU Library General Public License along with GNARL; see --
-- file COPYING. If not, write to the Free Software Foundation, 675 Mass --
-- Ave, Cambridge, MA 02139, USA. --
-- --
------------------------------------------------------------------------------
with System.Task_Clock;
with System.OS2Lib.Threads;
with System.OS2Lib.Synchronization;
package System.Task_Primitives is
-- Cannot be preelaborated, because body requires initialization
-- of Test_And_Set lock
-- pragma Preelaborate (Task_Primitives);
type LL_Task_Procedure_Access is new System.OS2Lib.Threads.PFNTHREAD;
-- type LL_Task_Procedure_Access is private; -- should be private ???
type Pre_Call_State is private;
type Task_Storage_Size is range 0 .. Integer'Last;
type Machine_Exceptions is range 0 .. Integer'Last;
type Interrupt_ID is range 0 .. Integer'Last;
type Interrupt_Info is new String;
type Error_information is new String;
Task_Wrapper_Frame : constant Integer := 72;
-- This is the size of the frame for the Pthread_Wrapper procedure.
-----------
-- Tasks --
-----------
type Task_Control_Block is private;
type TCB_Ptr is access all Task_Control_Block;
procedure Initialize_LL_Tasks (T : TCB_Ptr);
procedure Create_LL_Task
(Priority : Priority;
Stack_Size : Task_Storage_Size;
LL_Entry_Point : LL_Task_Procedure_Access;
Arg : Address;
T : TCB_Ptr);
procedure Exit_LL_Task;
function Self return TCB_Ptr;
-----------
-- Locks --
-----------
type Lock is private;
procedure Initialize_Lock (Prio : Integer; L : in out Lock);
procedure Finalize_Lock (L : in out Lock);
procedure Write_Lock (L : in out Lock; Ceiling_Violation : out Boolean);
procedure Read_Lock (L : in out Lock; Ceiling_Violation : out Boolean);
procedure Unlock (L : in out Lock);
-------------------------
-- Condition Variables --
-------------------------
type Condition_Variable is private;
procedure Initialize_Cond (Cond : in out Condition_Variable);
procedure Finalize_Cond (Cond : in out Condition_Variable);
procedure Cond_Wait (Cond : in out Condition_Variable; L : in out Lock);
procedure Cond_Timed_Wait
(Cond : in out Condition_Variable;
L : in out Lock;
Abs_Time : System.Task_Clock.Stimespec;
Timed_Out : out Boolean);
procedure Cond_Signal (Cond : in out Condition_Variable);
----------------
-- Priorities --
----------------
procedure Set_Priority (T : TCB_Ptr; Prio : Integer);
procedure Set_Own_Priority (Prio : Integer);
function Get_Priority (T : TCB_Ptr) return Integer;
function Get_Own_Priority return Integer;
-----------------------------
-- Signals, Errors, Aborts --
-----------------------------
procedure Abort_Task (T : TCB_Ptr);
procedure Test_Abort;
type Abort_Handler_Pointer is access procedure (Context : Pre_Call_State);
procedure Install_Abort_Handler (Handler : Abort_Handler_Pointer);
procedure Install_Error_Handler (Handler : Address);
procedure Signal_Task (T : TCB_Ptr; I : Interrupt_ID);
procedure Wait_for_Signal (I : Interrupt_ID);
function Reserved_Signal (I : Interrupt_ID) return Boolean;
procedure LL_Assert (B : Boolean; M : String);
--------------------------
-- Test and Set Support --
--------------------------
type TAS_Cell is private;
procedure Initialize_TAS_Cell (Cell : out TAS_Cell);
pragma Inline (Initialize_TAS_Cell);
procedure Finalize_TAS_Cell (Cell : in out TAS_Cell);
pragma Inline (Finalize_TAS_Cell);
procedure Clear (Cell : in out TAS_Cell);
pragma Inline (Clear);
procedure Test_And_Set (Cell : in out TAS_Cell; Result : out Boolean);
pragma Inline (Test_And_Set);
function Is_Set (Cell : in TAS_Cell) return Boolean;
pragma Inline (Is_Set);
private
use System.OS2Lib,
System.OS2Lib.Threads,
System.OS2Lib.Synchronization;
-- type LL_Task_Procedure_Access is new PFNTHREAD; ???
type Pre_Call_State is new Integer;
-- Unused for OS/2
type Task_Control_Block is record
LL_Entry_Point : LL_Task_Procedure_Access;
LL_Arg : Address;
Thread : TID;
Active_Priority : Priority;
Aborted : Boolean := False;
end record;
type Lock is
record
Mutex : aliased HMTX;
Priority : Integer;
Owner_Priority : Integer;
end record;
type Condition_Variable is new HEV;
type TAS_Cell is record
Value : aliased Boolean := False;
end record;
end System.Task_Primitives;