[Contents] [Index] [Help] [Retrace] [browse <] [Browse >]

        IFND    EXEC_TASKS_I
EXEC_TASKS_I    SET     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-1999 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