56 lines
1.6 KiB
C
56 lines
1.6 KiB
C
|
/*****************************************************************************
|
||
|
ExeD()
|
||
|
This function executes a D command.
|
||
|
nD Delete n characters.
|
||
|
m,nD Delete between m and n
|
||
|
*****************************************************************************/
|
||
|
#include "zport.h" /* define portability identifiers */
|
||
|
#include "tecoc.h" /* define general identifiers */
|
||
|
#include "defext.h" /* define external global variables */
|
||
|
#include "deferr.h" /* define identifiers for error messages */
|
||
|
DEFAULT ExeD() /* execute a D command */
|
||
|
{
|
||
|
LONG Status;
|
||
|
DBGFEN(1,"ExeD",NULL);
|
||
|
if (CmdMod & MARGIS) { /* if it's m,nD */
|
||
|
DBGFEX(1,DbgFNm,"ExeK()");
|
||
|
return ExeK();
|
||
|
}
|
||
|
if (EStTop == EStBot) { /* if no numeric argument */
|
||
|
NArgmt = 1; /* default is 1D */
|
||
|
} else {
|
||
|
UMinus(); /* if it's -D, make it -1D */
|
||
|
if (GetNmA() == FAILURE) { /* get numeric argument */
|
||
|
DBGFEX(1,DbgFNm,"FAILURE");
|
||
|
return FAILURE;
|
||
|
}
|
||
|
}
|
||
|
Status = -1; /* -1 means success */
|
||
|
if (NArgmt > 0) {
|
||
|
if ((GapEnd+NArgmt) > EBfEnd) { /* if out of range */
|
||
|
Status = 0; /* 0 means failure */
|
||
|
} else {
|
||
|
GapEnd += NArgmt; /* delete */
|
||
|
}
|
||
|
} else {
|
||
|
if ((GapBeg+NArgmt) < EBfBeg) { /* if out of range */
|
||
|
Status = 0; /* 0 means failure */
|
||
|
} else {
|
||
|
GapBeg += NArgmt; /* delete */
|
||
|
}
|
||
|
}
|
||
|
if (CmdMod & COLON) { /* if it's :D */
|
||
|
CmdMod = '\0'; /* clear modifiers flags */
|
||
|
DBGFEX(1,DbgFNm,"PushEx()");
|
||
|
return PushEx(Status, OPERAND);
|
||
|
}
|
||
|
if (Status == 0) {
|
||
|
ErrMsg(ERR_DTB); /* DTB = "delete too big" */
|
||
|
DBGFEX(1,DbgFNm,"FAILURE");
|
||
|
return FAILURE;
|
||
|
}
|
||
|
CmdMod = '\0'; /* clear modifiers flags */
|
||
|
DBGFEX(1,DbgFNm,"SUCCESS");
|
||
|
return SUCCESS;
|
||
|
}
|