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

	ExeT()

	This function executes a T command.

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

#include "ZPort.h"		/* define portability identifiers */
#include "DefTeco.h"		/* define general identifiers */
#include "DefChars.h"		/* define identifiers for characters */

extern	DEFAULT	GetAra();	/* get m,n area */
extern	DEFAULT	GetNmA();	/* get numeric argument */
extern	LONG	Ln2Chr();	/* convert line offset to character offset */
extern	VOID	StCopy();	/* string copy */
extern	VOID	TypBuf();	/* type a buffer */
extern	VOID	UMinus();	/* handle unary minus */

EXTERN	char	*AraBeg;	/* beginning of text m,n area */
EXTERN	char	*AraEnd;	/* end of m,n area */
EXTERN	BYTE	CmdMod;		/* command modifiers flags for @, :, etc. */
EXTERN	char	ErrTxt[];	/* holds part of error message */
EXTERN	WORD	EStBot;		/* expression stack bottom */
EXTERN	WORD	EStTop;		/* expression stack top */
EXTERN	char	*GapBeg;	/* beginning of edit buffer gap */
EXTERN	char	*GapEnd;	/* end of edit buffer gap */
EXTERN	LONG	MArgmt;		/* m part of m,n numeric arguments */
EXTERN	LONG	NArgmt;		/* numeric argument */


DEFAULT ExeT()				/* execute T command */
{

#if DEBUGGING
DbgInd+=2;if(DbgLvl>=1){DbgMsg();DbgDBf("ExeT: called.\015\012");DbgROf();}
#endif
	if (EStTop == EStBot)			/* if no numeric argument */
		NArgmt = 1L;			/* default is 1T */
	else
		{
		UMinus();			/* if it's -T, make it -1T */
		if (GetNmA() == FAILURE)	/* get numeric argument */
#if DEBUGGING
{if(DbgLvl>=1)
{DbgMsg();DbgDBf("ExeT: returning FAILURE.\015\012");DbgROf();}DbgInd-=2;
#endif
			return(FAILURE);
#if DEBUGGING
}
#endif
		}

	if (CmdMod & MARGIS)			/* if it's m,nT */
		{
		if (NArgmt != MArgmt)
			{
			StCopy(ErrTxt, "m,nT");
			if (GetAra() == FAILURE)
#if DEBUGGING
{if(DbgLvl>=1)
{DbgMsg();DbgDBf("ExeT: returning FAILURE.\015\012");DbgROf();}DbgInd-=2;
#endif
				return(FAILURE);
#if DEBUGGING
}
#endif
			if ((AraBeg < GapBeg) && (AraEnd > GapEnd))
				{
				TypBuf(AraBeg, GapBeg);
				TypBuf(GapEnd+1L, AraEnd+1L);
				}
			else
				TypBuf(AraBeg, AraEnd+1L);
			}
		}
	else					/* else it's nT */
		if (NArgmt <= 0L)
			TypBuf(GapBeg+Ln2Chr(NArgmt), GapBeg);
		else
			TypBuf(GapEnd+1L, GapEnd+Ln2Chr(NArgmt)+1L);
	CmdMod = '\0';				/* clear modifiers flags */
#if DEBUGGING
if(DbgLvl>=1)
{DbgMsg();DbgDBf("ExeT: returning SUCCESS.\015\012");DbgROf();}DbgInd-=2;
#endif
	return(SUCCESS);
}
