/*****************************************************************************

	MemIni()

	This function allocates memory for the edit buffer,  command buffer
and search string buffer.  Global variables are initialized by this function.

*****************************************************************************/

#include "ZPort.h"		/* define portability identifiers */
#include "DefTeco.h"		/* define general identifiers */
#include "DefError.h"		/* define identifiers for error messages */

extern	VOID	ZAbort();	/* cleanup and exit */
extern	char	*ZAlloc();	/* allocate memory */
extern	VOID	ZDspBf();	/* display a buffer on the terminal screen */

EXTERN	char	*CBfBeg;	/* command buffer beginning */
EXTERN	char	*CBfEnd;	/* command buffer end */
EXTERN	char	*EBfBeg;	/* edit buffer beginning */
EXTERN	char	*EBfEnd;	/* edit buffer end */
EXTERN	char	*FBfPtr;	/* file name buffer pointer */
EXTERN	char	*GapBeg;	/* edit buffer gap beginning */
EXTERN	char	*GapEnd;	/* edit buffer gap end */
EXTERN	char	*IBfEnd;	/* input buffer end */
EXTERN	BOOLEAN	IsEofI[];
EXTERN	BOOLEAN	IsOpnI[];
EXTERN	BOOLEAN	IsOpnO[];
EXTERN	struct	QReg QStack[];	/* q-register stack */
EXTERN	char	*SBfBeg;	/* search string buffer beginning */
EXTERN	char	*SBfEnd;	/* search string buffer end */
EXTERN	char	*SBfPtr;	/* search string buffer pointer */


VOID MemIni()
{
	WORD TmpWrd;

#if DEBUGGING
DbgInd+=2;if(DbgLvl>=1){DbgMsg();DbgDBf("MemIni: called\015\012");DbgROf();}
#endif

/*****************************************************************************
	allocate memory for the edit buffer and input buffer
*****************************************************************************/

	EBfBeg = GapBeg = ZAlloc(EBFINIT + IBFINIT);
	if (EBfBeg == NULL)
		{
		ErrMsg(ERR_MEM);		/* MEM = memory overflow */
		ZAbort();
		}
	EBfEnd = GapEnd = EBfBeg + EBFINIT;
	IBfEnd = EBfBeg + (EBFINIT + IBFINIT);
	IBfEnd--;

/*****************************************************************************
	allocate memory for the command buffer
*****************************************************************************/

	CBfBeg = ZAlloc(CBFINIT);
	if (CBfBeg == NULL)
		{
		ErrMsg(ERR_MEM);		/* MEM = memory overflow */
		ZAbort();
		}
	CBfEnd = CBfBeg + CBFINIT;
	CBfEnd--;

/*****************************************************************************
	allocate memory for the search string buffer
*****************************************************************************/

	SBfBeg = SBfPtr = ZAlloc(SBFINIT);
	if (SBfBeg == NULL)
		{
		ErrMsg(ERR_MEM);		/* MEM = memory overflow */
		ZAbort();
		}
	SBfEnd = SBfBeg + SBFINIT;
	SBfEnd--;

/*****************************************************************************
	clear the q-register stack
*****************************************************************************/

	for (TmpWrd=0; TmpWrd<QRS_SIZE; TmpWrd++)
		{
		QStack[TmpWrd].Start = NULL;
		QStack[TmpWrd].End_P1 = NULL;
		QStack[TmpWrd].Number = NULL;
		}

/*****************************************************************************
	Initialize the file-open and end-of-file indicators.
*****************************************************************************/

	for (TmpWrd=0; TmpWrd<=NIFDBS; TmpWrd++)
		IsOpnI[TmpWrd] = IsEofI[TmpWrd] = NO;
	for (TmpWrd=0; TmpWrd<=NOFDBS; TmpWrd++)
		IsOpnO[TmpWrd] = NO;
#if DEBUGGING
if(DbgLvl>=1)
{DbgMsg();DbgDBf("MemIni: returning\015\012");DbgROf();}DbgInd-=2;
#endif
}
