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

	ExeU()

	This function performs a U command.

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

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

extern	VOID	ErrMsg();	/* display error message */
extern	DEFAULT	FindQR();	/* find q-register index */
extern	DEFAULT	GetNmA();	/* get numeric argument */
extern	DEFAULT	IncCBP();	/* increment CBfPtr */
extern	DEFAULT	PushEx();	/* push onto expression stack */

EXTERN	BYTE	CmdMod;		/* command modifiers flags for @, :, etc. */
EXTERN	WORD	EStBot;		/* expression stack bottom */
EXTERN	WORD	EStTop;		/* expression stack top */
EXTERN	LONG	MArgmt;		/* m part of m,n numeric arguments */
EXTERN	LONG	NArgmt;		/* numeric argument */
EXTERN	LONG	*QNumbr;	/* pointer to q-register number */


DEFAULT ExeU()					/* execute U command */
{

#if DEBUGGING
DbgInd+=2;if(DbgLvl>=1){DbgMsg();DbgDBf("ExeU: called.\015\012");DbgROf();}
#endif
	if (EStTop == EStBot)			/* if no numeric argument */
		{
		ErrMsg(ERR_NAU);
#if DEBUGGING
if(DbgLvl>=1)
{DbgMsg();DbgDBf("ExeU: returning FAILURE.\015\012");DbgROf();}DbgInd-=2;
#endif
		return(FAILURE);
		}
	else
		if (GetNmA() == FAILURE)	/* get numeric argument */
#if DEBUGGING
{if(DbgLvl>=1)
{DbgMsg();DbgDBf("ExeU: returning FAILURE.\015\012");DbgROf();}DbgInd-=2;
#endif
			return(FAILURE);
#if DEBUGGING
}
#endif

	if (IncCBP() == FAILURE)
		return(FAILURE);
	if (FindQR() == FAILURE)
#if DEBUGGING
{if(DbgLvl>=1)
{DbgMsg();DbgDBf("ExeU: returning FAILURE.\015\012");DbgROf();}DbgInd-=2;
#endif
		return(FAILURE);
#if DEBUGGING
}
#endif
	*QNumbr = NArgmt;
	if (CmdMod & MARGIS)			/* if m,nUq */
#if DEBUGGING
{if(DbgLvl>=1)
{DbgMsg();DbgDBf("ExeU: returning PushEx().\015\012");DbgROf();}DbgInd-=2;
#endif
		return(PushEx(MArgmt, OPERAND));
#if DEBUGGING
}
#endif
	CmdMod = '\0';				/* clear modifiers flags */
#if DEBUGGING
if(DbgLvl>=1)
{DbgMsg();DbgDBf("ExeU: returning SUCCESS.\015\012");DbgROf();}DbgInd-=2;
#endif
	return(SUCCESS);
}
