#ifndef PV_MEMORYBASE_H
#define PV_MEMORYBASE_H TRUE
/*
**  $Filename: MemoryBase.h $
**  $Release: 1.40 $
**  $Revision: 37.1656 $
**  $Date: 24 Sep 92 $
**
**  Structure definitions for Memory Base (see 'TheWizardCorner')
**
**  © 1992 Jorrit Tyberghein, included with PowerVisor
**	    All Rights Reserved
*/

#ifndef PV_PVMEMORY_H
#include <pv/PVMemory.h>
#endif

/* Types for PVTag.Type */
#define TAG_BYTEASCII	1
#define TAG_WORDASCII	2
#define TAG_LONGASCII	3
#define TAG_ASCII	4
#define TAG_CODE	5
#define TAG_STRUCT	6

/* Bits for PVTag.Flags */
#define BTAG_WPROTECT	0		/* w */
#define BTAG_RPROTECT	1		/* r */
#define BTAG_IGNORE	2		/* i */
#define BTAG_PPRINT	3		/* p */
#define BTAG_FREEZE	4		/* f */

#define REGIONSIZE	8192


struct AutoClearList
	{
		struct AutoClearList *Next;
		PVBLOCK pointer;
	};

struct PVTag
	{
		APTR Address;
		ULONG Bytes;
		UWORD Flags;
		UWORD Type;
		ULONG Extra;
	};

struct PVMemoryHeader
	{
		struct PVMemoryHeader *Next;
		struct PVMemoryHeader *Prev;
		APTR First;		/* Pointer to first free memory chunk */
		ULONG Free;		/* Total free in memory block */
		APTR Lower;		/* Pointer to memory block */
		ULONG Size;		/* Total size of memory block */
		ULONG Attributes;	/* Attributes for this region (MEMF_CHIP, ...) */
		ULONG pad0;
	};

struct MemoryBase
	{
		struct AutoClearList *AutoClearList;
		struct AutoClearList *LastAutoClear;
		UWORD NumAutoClear;
		UWORD MaxNumAutoClear;
		struct PVMemoryBlock GlobalAutoClear;
		ULONG pad0;
		struct PVMemoryBlock CurrentTagList;
		ULONG NumCurrentTagList;
		struct PVMemoryBlock AllTags[16];
		ULONG pad1;
		APTR NextMemoryList;
		APTR NextSearch;
		ULONG RemainingBytes;
		PVBLOCK SearchString;
		UBYTE pad2;
		UBYTE pad3;
		struct PVMemoryBlock ResidentCode;
		ULONG pad4
		UBYTE pad5[10];
		ULONG LastBytes;
		ULONG LastLines;
		struct PVMemoryHeader *FirstRegion;
	};

#endif
