	IFND	EXEC_TASKS_I
EXEC_TASKS_I	EQU	1
**
**	$Filename: exec/tasks.i $
**	$Release: 2.04 Includes, V37.4 $
**	$Revision: 36.8 $
**	$Date: 90/10/22 $
**
**	Task Control Block, Signals, and Task flags.
**
**	(C) Copyright 1985-1991 Commodore-Amiga, Inc.
**	    All Rights Reserved
**

	IFND	EXEC_NODES_I
	INCLUDE	"exec/nodes.i"
	ENDC	; EXEC_NODES_I

	IFND	EXEC_LISTS_I
	INCLUDE	"exec/lists.i"
	ENDC	; EXEC_LISTS_I

	IFND	EXEC_PORTS_I
	INCLUDE	"exec/ports.i"
	ENDC	; EXEC_PORTS_I


*----------------------------------------------------------------
*
*	Task Control Structure
*
*	Please use Exec functions to modify task structure fields,
*	where available.
*
*----------------------------------------------------------------

	STRUCTURE	TC_Struct,LN_SIZE	    ; was "TC"
	UBYTE	TC_FLAGS
	UBYTE	TC_STATE
	BYTE	TC_IDNESTCNT	    ; intr disabled nesting
	BYTE	TC_TDNESTCNT	    ; task disabled nesting
	ULONG	TC_SIGALLOC	    ; sigs allocated
	ULONG	TC_SIGWAIT		    ; sigs we are waiting for
	ULONG	TC_SIGRECVD	    ; sigs we have received
	ULONG	TC_SIGEXCEPT	    ; sigs we take as exceptions
	;* Pointer to an extended task structure.  This structure is allocated
	;* by V36 Exec if the proper flags in tc_ETaskFlags are set.  This
	;* field was formerly defined as:
	;*		UWORD	TC_TRAPALLOC	    ; traps allocated
	;*		UWORD	TC_TRAPABLE	    ; traps enabled
	;* Please see the Exec AllocTrap() and FreeTrap() calls.
	;*
	APTR	tc_ETask		    ; pointer to extended task structure
	APTR	TC_EXCEPTDATA	    ; data for except proc
	APTR	TC_EXCEPTCODE	    ; exception procedure
	APTR	TC_TRAPDATA	    ; data for proc trap proc
	APTR	TC_TRAPCODE	    ; proc trap procedure
	APTR	TC_SPREG		    ; stack pointer
	APTR	TC_SPLOWER		    ; stack lower bound
	APTR	TC_SPUPPER		    ; stack upper bound + 2
	FPTR	TC_SWITCH		    ; task losing CPU (function pointer)
	FPTR	TC_LAUNCH		    ; task getting CPU (function pointer)
	STRUCT	TC_MEMENTRY,LH_SIZE     ; Allocated memory list.  Freed by RemTask()
	APTR	TC_Userdata		    ; For use by the task; no restrictions!
	LABEL	TC_SIZE


;Don't even _think_ about allocating one of these yourself.
	STRUCTURE	ETask,MN_SIZE
	APTR	et_Parent		;Pointer to task (TC)
	ULONG	et_UniqueID		;ID unique to this task
	STRUCT	et_Children,MLH_SIZE	;List of children
	UWORD	et_TRAPALLOC
	UWORD	et_TRAPABLE
	ULONG	et_Result1		;First result
	APTR	et_Result2		;Result data pointer (AllocVec)
	STRUCT	et_TaskMsgPort,MP_SIZE
	LABEL	ETask_SIZEOF	;_never_ depend on this size!


CHILD_NOTNEW	EQU	1	;function not called from a new style task
CHILD_NOTFOUND	EQU	2	;child not found
CHILD_EXITED	EQU	3	;child has exited
CHILD_ACTIVE	EQU	4	;child has exited


;Stack swap structure as passed to StackSwap()
;
	STRUCTURE	StackSwapStruct,0
	APTR	stk_Lower	;Lowest byte of stack
	ULONG	stk_Upper	;Upper end of stack (size + Lowest)
	APTR	stk_Pointer	;Stack pointer at switch point
	LABEL	StackSwapStruct_SIZEOF


;------ TC_FLAGS Bits:

	BITDEF	T,PROCTIME,0
	BITDEF	T,ETASK,3
	BITDEF	T,STACKCHK,4
	BITDEF	T,EXCEPT,5
	BITDEF	T,SWITCH,6		;Enable TC_SWITCH point
	BITDEF	T,LAUNCH,7		;Enable TC_LAUNCH point


;------ Task States:

TS_INVALID	EQU	0
TS_ADDED	EQU	TS_INVALID+1
TS_RUN	EQU	TS_ADDED+1
TS_READY	EQU	TS_RUN+1
TS_WAIT	EQU	TS_READY+1
TS_EXCEPT	EQU	TS_WAIT+1
TS_REMOVED	EQU	TS_EXCEPT+1


;------ System Task Signals:

	BITDEF	SIG,ABORT,0
	BITDEF	SIG,CHILD,1
	BITDEF	SIG,BLIT,4	; Note: same as SINGLE
	BITDEF	SIG,SINGLE,4	; "single-threaded".  Note: same as BLIT
	BITDEF	SIG,INTUITION,5
	BITDEF	SIG,DOS,8


SYS_SIGALLOC	EQU	$0FFFF		; pre-allocated signals
SYS_TRAPALLOC	EQU	$08000		; pre-allocated traps

	ENDC	; EXEC_TASKS_I
