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

	ExeV()

	This function executes a V command.

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

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

extern	DEFAULT	GetNmA();	/* get numeric argument */
extern	LONG	Ln2Chr();	/* convert line offset to character offset */
extern	VOID	TypBuf();	/* type a buffer */
extern	VOID	UMinus();	/* handle unary minus */

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


DEFAULT ExeV()			/* execute an V command */
{

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

	if (CmdMod & MARGIS)			/* if it's m,nV */
		TypBuf(GapBeg+Ln2Chr(1L-MArgmt), GapBeg);
	else
		TypBuf(GapBeg+Ln2Chr(1L-NArgmt), GapBeg);
	TypBuf(GapEnd+1L, GapEnd+Ln2Chr(NArgmt)+1L);

	CmdMod = '\0';				/* clear modifiers flags */
#if DEBUGGING
if(DbgLvl>=1)
{DbgMsg();DbgDBf("ExeV: returning SUCCESS.\015\012");DbgROf();}DbgInd-=2;
#endif
	return(SUCCESS);
}
