/* ==========================================================================
	File:		GSYS.H

	Notes:		Machine Independant API to target for low level system info
				and manipulation
	
	Author:		Gary Liddon

	Copyright (C) 1995 - 1997 Gary Liddon
	All rights reserved. 
  =========================================================================== */

#ifndef __GSYS_H__
#define __GSYS_H__

/* ---------------------------------------------------------------------------
	Includes
	-------- */
#include "gtypes.h"

/* ---------------------------------------------------------------------------
	Defines
	------- */

/* ---------------------------------------------------------------------------
	Typedefs
	-------- */

/* ---------------------------------------------------------------------------
	Enums
	----- */

/* ---------------------------------------------------------------------------
	Externs
	------- */

/* ---------------------------------------------------------------------------
	Structures
	---------- */
typedef struct MEM_INFO
{
	void *	Addr;
	U32		Size;

}	MEM_INFO;


/* ---------------------------------------------------------------------------
	Supported Functions
	------------------- */
#ifdef __cplusplus
extern "C" {
#endif

/*	System Initialisation stuff
	--------------------------- */
GLIB_API BOOL	GSYS_InitMachine(void);

/*	Stack handling functions
	------------------------ */
GLIB_API void	GSYS_SetStackAndJump(void *Stack,void(*Func)(void *),void *Param);
GLIB_API void	GSYS_MarkStack(void * Stack, U32 StackSize);
GLIB_API BOOL	GSYS_IsStackCorrupted(void * Stack, U32 StackSize);
GLIB_API BOOL	GSYS_CheckPtr(void *Ptr);
GLIB_API BOOL	GSYS_IsStackOutOfBounds(void* Stack, U32 StackSize);

/*	Machine Info Functions
	---------------------- */
GLIB_API const MEM_INFO *	GSYS_GetWorkMemInfo(void);

#ifdef __cplusplus
};
#endif

/*	Global Vars
	----------- */
GLIB_API extern UINT		GSYS_MemStart;
GLIB_API extern UINT		GSYS_MemEnd;

/* --------------------------------------------------------------------------- */
#endif
/* ---------------------------------------------------------------------------
	ends */