#ifndef PV_GENERALBASE_H
#define PV_GENERALBASE_H TRUE
/*
**  $Filename: GeneralBase.h $
**  $Release: 1.02 $
**  $Revision: 37.346 $
**  $Date: 15 Sep 91 $
**
**  Structure definitions for General Base (see 'TheWizardCorner')
**
**  © 1991 Jorrit Tyberghein, included with PowerVisor
**	    All Rights Reserved
*/

#ifndef PV_PVMEMORY_H
#include "PVMemory.h"
#endif

#ifndef EXEC_LISTS_H
#include <exec/lists.h>
#endif

#ifndef EXEC_PORTS_H
#include <exec/ports.h>
#endif

#ifndef DOS_DOS_H
#include <dos/dos.h>
#endif


#define CRASH_TRAP	0
#define CRASH_GURU	1
#define CRASH_STACK	2

#define FUNCMON_NORMAL	0
#define FUNCMON_LED	1
#define FUNCMON_REGINFO	2
#define FUNCMON_LEDINFO	3
#define FUNCMON_EXEC	8


struct CrashNode
	{
		struct Node node;
		struct Task *Task;
		ULONG TrapNumber;
		ULONG SecondInfo;
		UBYTE CrashType;
		UBYTE pad0;
		ULONG SP;
		ULONG PC;
		UWORD SR;
		ULONG Registers[15];
	};

struct FDFileNode
	{
		struct Node node;
		struct Library *Library;
		UWORD Bias;
		struct PVMemoryBlock Functions;
		struct PVMemoryBlock Strings;
		UWORD NrFunctions;
	};

struct AllRegs
	{
		ULONG Registers[14];
	};

struct MonitorNode
	{
		struct Node node;
		struct Library *Library;
		UWORD Offset;
		struct Task *Task;
		ULONG UsageCount;
		APTR CountCode;
		ULONG CountCodeSize;
		APTR OldFunction;
		UWORD Type;
		UWORD Position;
		APTR Tasks[8];
		struct AllRegs[8];
		APTR Command;
	};

struct PowerVisorPort
	{
		struct MsgPort port;
		APTR PVCallTable;
		UWORD pad0;
	};

struct GeneralBase
	{
		struct Process *PowerVisor;
		ULONG PVStackFailLevel;
		struct IORequest *TrackDiskRequest;
		struct MsgPort *TrackDiskPort;
		APTR OldExecTrapCode;
		ULONG MMUType;
		UWORD Processor;
		APTR AccountTasks;
		APTR OldSwitch;
		APTR OldAlert;
		APTR OldAddTask;
		APTR OldAutoRequest;
		ULONG StackFailLevel;
		UBYTE pad0[8];
		struct List FreezedTasks;
		struct List CrashedTasks;
		struct List FDFiles;
		struct List MonitorFunctions;
		struct PowerVisorPort PVPort;
		UBYTE PatchMode;
		UBYTE OldPriority;
		struct IORequest *TimerRequest;
		struct MsgPort *TimerPort;
		ULONG MaxStackUsage;
		struct Task *StackTask;
		ULONG Micros;
	};

#endif
