#ifndef EXEC_TASKS_H
#define EXEC_TASKS_H
/*
** $Filename: exec/tasks.h $
** $Release: 2.04 Includes, V37.4 $
** $Revision: 36.9 $
** $Date: 91/11/06 $
**
** Task Control Block, Singals, and Task flags.
**
** (C) Copyright 1985-1999 Amiga, Inc.
** All Rights Reserved
*/
#ifndef EXEC_NODES_H
#include "exec/nodes.h"
#endif /* EXEC_NODES_H */
#ifndef EXEC_LISTS_H
#include "exec/lists.h"
#endif /* EXEC_LISTS_H */
/* Please use Exec functions to modify task structure fields, where available.
*/
struct Task {
struct Node tc_Node;
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 will take excepts for */
UWORD tc_TrapAlloc; /* traps allocated */
UWORD tc_TrapAble; /* traps enabled */
APTR tc_ExceptData; /* points to except data */
APTR tc_ExceptCode; /* points to except code */
APTR tc_TrapData; /* points to trap code */
APTR tc_TrapCode; /* points to trap data */
APTR tc_SPReg; /* stack pointer */
APTR tc_SPLower; /* stack lower bound */
APTR tc_SPUpper; /* stack upper bound + 2*/
VOID (*tc_Switch)(); /* task losing CPU */
VOID (*tc_Launch)(); /* task getting CPU */
struct List tc_MemEntry; /* Allocated memory. Freed by RemTask() */
APTR tc_UserData; /* For use by the task; no restrictions! */
};
/*
* Stack swap structure as passed to StackSwap()
*/
struct StackSwapStruct {
APTR stk_Lower; /* Lowest byte of stack */
ULONG stk_Upper; /* Upper end of stack (size + Lowest) */
APTR stk_Pointer; /* Stack pointer at switch point */
};
/*----- Flag Bits ------------------------------------------*/
#define TB_PROCTIME 0
#define TB_ETASK 3
#define TB_STACKCHK 4
#define TB_EXCEPT 5
#define TB_SWITCH 6
#define TB_LAUNCH 7
#define TF_PROCTIME (1<<0)
#define TF_ETASK (1<<3)
#define TF_STACKCHK (1<<4)
#define TF_EXCEPT (1<<5)
#define TF_SWITCH (1<<6)
#define TF_LAUNCH (1<<7)
/*----- Task States ----------------------------------------*/
#define TS_INVALID 0
#define TS_ADDED 1
#define TS_RUN 2
#define TS_READY 3
#define TS_WAIT 4
#define TS_EXCEPT 5
#define TS_REMOVED 6
/*----- Predefined Signals -------------------------------------*/
#define SIGB_ABORT 0
#define SIGB_CHILD 1
#define SIGB_BLIT 4 /* Note: same as SINGLE */
#define SIGB_SINGLE 4 /* Note: same as BLIT */
#define SIGB_INTUITION 5
#define SIGB_DOS 8
#define SIGF_ABORT (1L<<0)
#define SIGF_CHILD (1L<<1)
#define SIGF_BLIT (1L<<4)
#define SIGF_SINGLE (1L<<4)
#define SIGF_INTUITION (1L<<5)
#define SIGF_DOS (1L<<8)
#endif /* EXEC_TASKS_H */