#ifndef PV_LISTBASE_H
#define PV_LISTBASE_H TRUE
/*
**  $Filename: ListBase.h $
**  $Release: 1.02 $
**  $Revision: 37.346 $
**  $Date: 15 Sep 91 $
**
**  Structure definitions for List 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


#define STRUCTDEF_BYTE		0
#define STRUCTDEF_WORD		1
#define STRUCTDEF_LONG		2
#define STRUCTDEF_STRING	3
#define STRUCTDEF_OBJECT	4
#define STRUCTDEF_BPTR		128

#define IBCTRLBYTE_BASEROUTINE	-1
#define IBCTRLBYTE_STRUCTURE	-2
#define IBCTRLBYTE_ALLROUTINE	-3

#define IBCTRLBYTE_NIBBLE1	15
#define IBCTRLBYTE_NIBBLE2	240

#define IBCTRLBYTE_NOTHING	0
#define IBCTRLBYTE_INDIRECT	1
#define IBCTRLBYTE_BPTR		2


struct StructDef
	{
		APTR String;
		UWORD Type;
		UWORD Offset;
	};

struct StructureDef
	{
		struct Node node;
		ULONG MatchWord;	/* 'PVSD' */
		PVBLOCK Strings;
		PVBLOCK StructureDefinition;
		UWORD Length;
	};

struct InfoBlock
	{
		ULONG PromptString;
		UBYTE ItemNumber;
		UBYTE ControlByte;
		union
			{
				APTR Routine;
				APTR Base;
			} GoToBase;
		UWORD Offset;
		union
			{
				APTR Routine;
				struct StructDef *Structure;
			} NextElem;
		APTR HeaderString;
		APTR FormatString;
		ULONG ArgString;
		UBYTE Null;
		UBYTE UseInfoStructure;
		union
			{
				APTR Routine;
				struct StructDef *Structure;
			} Info;
		APTR PrintOneLineRout;
		UWORD NameOffset;
	};

struct ListBase
	{
		APTR OldWindowPtr;
		ULONG PromptString;
		UWORD CurrentListNum;
		UWORD pad0;
		struct List StructureDefs;
		struct InfoBlock IBExec;
		struct InfoBlock IBIntb;
		struct InfoBlock IBTask;
		struct InfoBlock IBLibs;
		struct InfoBlock IBDevs;
		struct InfoBlock IBReso;
		struct InfoBlock IBMemr;
		struct InfoBlock IBIntr;
		struct InfoBlock IBPort;
		struct InfoBlock IBWins;
		struct InfoBlock IBScrs;
		struct InfoBlock IBFont;
		struct InfoBlock IBDosd;
		struct InfoBlock IBFunc;
		struct InfoBlock IBSema;
		struct InfoBlock IBResm;
		struct InfoBlock IBFils;
		struct InfoBlock IBLock;
		struct InfoBlock IBIHan;
		struct InfoBlock IBFDFi;
		struct InfoBlock IBAttc;
		struct InfoBlock IBCrsh;
		struct InfoBlock IBGraf;
		struct InfoBlock IBDbug;
		struct InfoBlock IBStru;
		struct InfoBlock IBPubs;	/* */
		struct InfoBlock IBMoni;	/* */
		struct InfoBlock IBConf;
		struct InfoBlock IBLWin;
		struct InfoBlock IBPWin;
	};

#endif
