Example #1
0
integer ExeU()					/* execute U command */
{
	DBGFEN(1,"ExeU",NULL);
	if (EStTop == EStBot) {			/* if no numeric argument */
		ErrMsg(ERR_NAU);
		DBGFEX(1,DbgFNm,"FAILURE, no arg before U");
		return FAILURE;
	}

	if (GetNmA() == FAILURE) {		/* get numeric argument */
		DBGFEX(1,DbgFNm,"FAILURE, GetNmA() failed");
		return FAILURE;
	}
	if (IncCBP() == FAILURE) {		/* increment to Q-reg name */
		DBGFEX(1,DbgFNm,"FAILURE, IncCBp() failed.");
		return FAILURE;
	}
	if (FindQR() == FAILURE) {
		DBGFEX(1,DbgFNm,"FAILURE, FindQR() failed");
		return FAILURE;
	}

	QR->Number = NArgmt;
	if (CmdMod & MARGIS) {			/* if m,nUq */
		DBGFEX(1,DbgFNm,"PushEx()");
		return PushEx(MArgmt, OPERAND);
	}

	CmdMod = '\0';				/* clear modifiers flags */

	DBGFEX(1,DbgFNm,"SUCCESS");
	return SUCCESS;
}
Example #2
0
integer ExeCtU()		/* execute a ^U (control-U) command */
{
    ptrdiff_t TmpSiz;

    DBGFEN(1,"ExeCtU",NULL);

    /*
     * increment CBfPtr past ^U
     */
    if (IncCBP() == FAILURE) {
        DBGFEX(1,DbgFNm,"FAILURE, IncCBP() failed");
        return FAILURE;
    }

    /*
     * try to find Q-register name after ^U
     */
    if (FindQR() == FAILURE) {
        DBGFEX(1,DbgFNm,"FAILURE, FindQR() failed");
        return FAILURE;
    }

    /*
     * If there is a colon modifier, we are appending to the Q-register text.
     * If there isn't a colon modifier, we are replacing the text currently
     * in the Q-register.  If there is any text currently in the Q-register,
     * we have to zap it first.
     */
    if (!(CmdMod & COLON)) {		/* if no colon modifier */
        if (QR->Start != NULL) {	/* if not empty */
            ZFree((voidptr)QR->Start);	/* free the memory */
            QR->Start = QR->End_P1 = NULL;
        }
    }


    /*
     * If there is a numeric argument n, we are dealing with a character to
     * place into or append to the Q-register.
     */
    if (EStTop > EStBot) {			/* if numeric argument */
        if (GetNmA() == FAILURE) {	/* get numeric argument */
            DBGFEX(1,DbgFNm,"FAILURE, GetNmA() failed");
            return FAILURE;
        }
        if (CmdMod & ATSIGN) {		/* it's @^U// */

            /*
             * increment CBfPtr to 1st delimiter
             */
            if (IncCBP() == FAILURE) {
                DBGFEX(1,DbgFNm,"FAILURE, IncCBP() failed");
                return FAILURE;
            }

            /*
             * increment CBfPtr to 2nd delimiter
             */
            if (IncCBP() == FAILURE) {
                DBGFEX(1,DbgFNm,"FAILURE, IncCBP() failed");
                return FAILURE;
            }

            /*
             * the two delimiters should be the same
             */
            if (*CBfPtr != *(CBfPtr-1)) {
                ErrMsg(ERR_IIA);
                DBGFEX(1,DbgFNm,"FAILURE, ERR_IIA");
                return FAILURE;
            }
        }

        /*
         * Increase the size of the text area by 1 character
         */
        if (MakRom((size_t) 1) == FAILURE) {
            DBGFEX(1,DbgFNm,"FAILURE, MakRom() failed");
            return FAILURE;
        }

        /*
         * Append the character to the Q-register
         */
        *(QR->End_P1) = (char) NArgmt;
        QR->End_P1++;
    } else {				/* else no numeric argument */
        /*
         * We must be dealing with a string, find the end of the string.
         */
        if (FindES(ESCAPE) == FAILURE) {
            DBGFEX(1,DbgFNm,"FAILURE, FindES() failed");
            return FAILURE;
        }

        TmpSiz = CBfPtr - ArgPtr;
        if (TmpSiz > 0) {

            /*
             * make room for the string
             */
            if (MakRom((size_t)TmpSiz) == FAILURE) {
                DBGFEX(1,DbgFNm,"FAILURE, MakRom() failed");
                return FAILURE;
            }

            /*
             * Append the string to the Q-register text
             */
            MEMMOVE(QR->End_P1, ArgPtr, (size_t)TmpSiz);
            QR->End_P1 += TmpSiz;
        }
    }

    CmdMod = '\0';				/* clear modifiers flags */

    DBGFEX(1,DbgFNm,"SUCCESS");
    return SUCCESS;
}
Example #3
0
static int
DoCtE(charptr EndArg, charptr XBfEnd)        /* do a control-E */
/* charptr EndArg;                         ptr to end of string argument */
/* charptr XBfEnd;                         end of build-string buffer */
{
    int        Status;                        /* returned from FindQR */
    charptr        TCStEn;                        /* temporary holder of CStEnd */

    DBGFEN(3, "DoCtE", NULL);
    if (++CBfPtr == EndArg)                 /* move past ^E,  too far? */
    {
        ErrMsg(ERR_ICE);                /* yes, illegal ^E command */
        DBGFEX(2,DbgFNm,"FAILURE");
        return FAILURE;
    }
    if ((*CBfPtr == 'Q') || (*CBfPtr == 'q'))
    {
        if (++CBfPtr == EndArg)
        {
            ErrMsg(ERR_ISS);
            DBGFEX(2,DbgFNm,"FAILURE");
            return FAILURE;
        }

/*
 * handle filespec buffer and search string buffer
 */
        if (*CBfPtr == '*' || *CBfPtr == '_') {
            charptr BufPtr, BufBeg;
            if (*CBfPtr == '*')
            {
                BufPtr = FBfPtr;
                BufBeg = FBfBeg;
            }
            else
            {
                BufPtr = SBfPtr;
                BufBeg = SBfBeg;
            }

            if ((BufPtr-BufBeg) > (XBfEnd-BBfPtr))
            {
                ErrMsg(ERR_STL);
                DBGFEX(2, DbgFNm, "FAILURE");
                return FAILURE;
            }
            MEMMOVE(BBfPtr, BufBeg, (size_t)(BufPtr - BufBeg));
            BBfPtr += BufPtr-BufBeg;
        }
        else
        {
/*
 * it really must be a Q reg reference after all
 */
            TCStEn = CStEnd;                        /* save CStEnd */
            CStEnd = EndArg;
            Status = FindQR();
            CStEnd = TCStEn;                        /* restore CStEnd */
            if (Status == FAILURE)
            {
                DBGFEX(2,DbgFNm,"FAILURE");
                return FAILURE;
            }

            if ((QR->End_P1-QR->Start) > (XBfEnd-BBfPtr))
            {
                ErrMsg(ERR_STL);
                DBGFEX(2,DbgFNm,"FAILURE");
                return FAILURE;
            }
            MEMMOVE(BBfPtr, QR->Start, (size_t)(QR->End_P1 - QR->Start));
            BBfPtr += QR->End_P1 - QR->Start;
        }
    }
    else if ((*CBfPtr == 'U') || (*CBfPtr == 'u'))
    {
        if (++CBfPtr == EndArg)
        {
            ErrMsg(ERR_ISS);
            DBGFEX(2, DbgFNm, "FAILURE");
            return FAILURE;
        }

        TCStEn = CStEnd;                        /* save CStEnd */
        CStEnd = EndArg;
        Status = FindQR();
        CStEnd = TCStEn;                        /* restore CStEnd */
        if (Status == FAILURE)
        {
            DBGFEX(2,DbgFNm,"FAILURE");
            return FAILURE;
        }
        *BBfPtr++ = (char)QR->Number;
    }
    else
    {
        *BBfPtr++ = CTRL_E;
        *BBfPtr++ = *CBfPtr;
    }
    DBGFEX(2,DbgFNm,"SUCCESS");
    return SUCCESS;
}
Example #4
0
integer ExeRBr()                /* execute ] command */
{
	QRptr		TmpQRp;
	ptrdiff_t	TmpSiz;
	bool		ColonMod;

#if DEBUGGING
	static char *DbgFNm = "ExeRBr";
	sprintf(DbgSBf, "QStTop = %d", QStTop);
	DbgFEn(1,DbgFNm,DbgSBf);
#endif

	ColonMod = (CmdMod & COLON);		/* is it :] ? */
	CmdMod &= ~COLON;			/* clear colon flag */

	if (IncCBP() == FAILURE) {
		return FAILURE;
	}

	if (FindQR() == FAILURE) {
		DBGFEX(1,DbgFNm,"FAILURE");
		return FAILURE;
	}

	if (QStTop < 0)	{			/* if q-reg stack is empty */
		if (ColonMod) {			/* if it's :] */
			DBGFEX(1,DbgFNm,"PushEx(0)");
			return PushEx(0L, OPERAND);
		} else {
			ErrMsg(ERR_PES);	/* can't pop empty stack */
			DBGFEX(1,DbgFNm,"FAILURE");
			return FAILURE;
		}
	}

/*
 * Copy QStack Q-register to QR
 */
	TmpQRp = &QStack[QStTop];
	TmpSiz = TmpQRp->End_P1 - TmpQRp->Start;
	if (TmpSiz == 0) {			/* if it should be empty */
		if (QR->Start != NULL) {	    /* but it isn't empty */
			ZFree((voidptr)QR->Start);	/* then empty it */
			QR->Start = QR->End_P1 = NULL;
		}
	} else {
		if (MakRom((size_t)TmpSiz) == FAILURE) { /* adjust QR space */
			DBGFEX(1,DbgFNm,"FAILURE");
			return FAILURE;
		}
		MEMMOVE(QR->Start, TmpQRp->Start, (size_t)TmpSiz);
		QR->End_P1 = QR->Start + TmpSiz;
	}
	QR->Number = TmpQRp->Number;

/*
 * clear QStack Q-register
 */
	if (TmpQRp->Start != NULL) {
		ZFree((voidptr)TmpQRp->Start);
		TmpQRp->Start = TmpQRp->End_P1 = NULL;
	}
	TmpQRp->Number = 0;

	--QStTop;

	DBGFEX(1,DbgFNm,(ColonMod) ? "PushEx(-1)" : "SUCCESS");
	return (ColonMod) ? PushEx(-1L, OPERAND) : SUCCESS;
}
Example #5
0
/*****************************************************************************
	BakSrc()
	This recursive function does a backward search in the edit buffer,
looking for a string which will match the first match construct in the search
buffer.  Basically,  it is the high-speed part of the search algorithm: it
scans the edit buffer looking for the first character in the search string.
	On entry, SStPtr points to the first match construct in the search
buffer.  On exit,  SStPtr points to the last character of the first match
construct in the search buffer.
	SBfPtr points to the character following the last character in
the search string.  This function does not modify SBfPtr.
	On entry,  EBPtr1 points to the place in the edit buffer where
the search starts.  On exit,  if the search was successful,  EBPtr1 will
point to the found character.  If the search was unsuccessful,  EBPtr1 will
be less than EndSAr.
	On entry,  EBPtr2 is undefined.  On exit,  if the search was
successful,  EBPtr2 points to the last character of the found string.  If
the search was unsuccessful,  EBPtr2 is undefined.
	EndSAr points to the end of the search area (where the search ends).
Note that for backwards searches,  EndSAr is less than EBPtr1.  This function
does not modify EndSAr.
	Match constructs are:
	^X		match any character
	^S		match a separator character (not letter or digit)
	^N		match anything but following match construct
	^EA		match any alphabetic
	^EB		match a separator character (not letter or digit)
	^EC		match symbol constituent
	^ED		match any digit
	^EGq		match any character in q-register q
	^EL		match any line terminator (LF, VT, FF)
	^EM		match non-null string of following match construct
	^ER		match any alphanumeric
	^ES		match non-null string of spaces and/or tabs
	^EV		match lowercase alphabetic
	^EW		match uppercase alphabetic
	^EX		match any character
	^E<nnn>		match character with ASCII code nnn (octal)
	^E[x1,x2,...xn]	match any of the match constructs x1, x2, etc.
	else		match the character itself
*****************************************************************************/
#include "zport.h"		/* define portability identifiers */
#include "tecoc.h"		/* define general identifiers */
#include "defext.h"		/* define external global variables */
#include "dchars.h"		/* define identifiers for characters */
#include "chmacs.h"		/* define character processing macros */
#include "deferr.h"		/* define identifiers for error messages */
DEFAULT BakSrc()		/* forward search for 1st search char */
{
    unsigned char Charac;	/* holds a character */
    charptr	LstBeg;		/* beginning of ^E[x1,x2,...] list */
    char	OtCase;		/* "other" case character */
    charptr	QRPtr;		/* pointer into q-register text */
    BOOLEAN	SamChr;		/* same character indicator */
    charptr	SavEP2;		/* temporary holder of EBPtr2 */
    charptr	SavSSP;		/* temporary holder of SStPtr */
    DEFAULT	Status;		/* FindQR() status for ^EGq */
    charptr	TCBfPt;		/* temporary holder of CBfPtr */
    charptr	TCStEn;		/* temporary holder of CStEnd */
    LONG	TmpLng;		/* holds octal number for ^E<nnn> */
#if DEBUGGING
    static char *DbgFNm = "BakSrc";
    sprintf(DbgSBf,"*SStPtr = '%c', *EBPtr1 = '%c'", *SStPtr, *EBPtr1);
    DbgFEn(3,DbgFNm,DbgSBf);
#endif
    switch (*SStPtr) {
	case CTRL_X:	/* ^X match any char */
    	    break;
	case CTRL_S:	/* ^S match separator char */
	    for (; EBPtr1 >= EndSAr; --EBPtr1) {
	        if (!Is_Alnum(*EBPtr1)) {
		    break;
		}
	    }
	    break;
	case CTRL_N:	/* ^Nx match any BUT next match construct */
	    if (++SStPtr == SBfPtr) {
	        ErrMsg(ERR_ISS);		/* illegal search string */
		DBGFEX(3,DbgFNm,"FAILURE, no ^N arg");
		return FAILURE;
	    }
	    SavSSP = SStPtr;
	    for (;EBPtr1>=EndSAr;--EBPtr1) {
	        EBPtr2 = EBPtr1;
		SStPtr = SavSSP;
		if (CMatch(&SamChr) == FAILURE) {
		    DBGFEX(3,DbgFNm,"FAILURE, CMatch failed");
		    return FAILURE;
		}
		if (!SamChr) {
		    break;
		}
	    }
	    break;
	case CTRL_E:	/* ^E match construct */
	    if (++SStPtr == SBfPtr) {
	        ErrMsg(ERR_ICE);	/* ICE = illegal ^E */
		DBGFEX(3,DbgFNm,"FAILURE, no ^E arg");
		return FAILURE;
	    }
	    switch (To_Upper(*SStPtr)) {
	        case 'A':	/* ^EA match any alphabetic */
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
		        if (Is_Alpha(*EBPtr1)) {
			    break;
			}
		    }
		    break;
		case 'B':	/* ^EB match any separator (==^S) */
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
		        if (!Is_Alnum(*EBPtr1)) {
			    break;
			}
		    }
		    break;
		case 'C':	/* ^EC match symbol constitient */
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
		        if (Is_SyCon(*EBPtr1)) {
			    break;
			}
		    }
		    break;
		case 'D':	/* ^ED match any digit */
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
		        if (Is_Digit(*EBPtr1)) {
			    break;
			}
		    }
		    break;
		case 'G':	/* ^EGq match any char in Q-reg q */
		    if (++SStPtr == SBfPtr) {
		        ErrMsg(ERR_ICE);
			DBGFEX(3,DbgFNm,"FAILURE, no ^EG arg");
			return FAILURE;
		    }
		    TCBfPt = CBfPtr;	/* save CBfPtr */
		    TCStEn = CStEnd;	/* save CStEnd */
		    CBfPtr = SStPtr;
		    CStEnd = SBfPtr;
		    Status = FindQR();
		    SStPtr = CBfPtr;
		    SBfPtr = CStEnd;
		    CBfPtr = TCBfPt;	/* restore CBfPtr */
		    CStEnd = TCStEn;	/* restore CStEnd */
		    if (Status == FAILURE) {
		        DBGFEX(3,DbgFNm,"FAILURE, ^EG FindQR failed");
			    return FAILURE;
		    }	
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
		        QRPtr = QR->Start;
			while (QRPtr < QR->End_P1) {
			    if (*QRPtr++ == *EBPtr1) {
			        goto kludge;
			    }
			}
		    }
kludge:		    break;
		case 'L':	/* ^EL match line terminator */
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
		        if (IsEOL(*EBPtr1)) {
			    break;
			}
		    }
		    break;
		case 'M':	/* ^EM match multiple next constructs */
		    if (++SStPtr == SBfPtr) {
		        ErrMsg(ERR_ICE);
			DBGFEX(3,DbgFNm,"FAILURE, no ^EM arg");
			return FAILURE;
		    }
		    SavSSP = SStPtr;
		    if (BakSrc() == FAILURE) {
		        DBGFEX(3,DbgFNm,"FAILURE");
			return FAILURE;
		    }
		    if (EBPtr1 < EndSAr) {	/* if not found */
		        break;
		    }
		    SavEP2 = EBPtr2;
		    while (EBPtr1 > EndSAr) {
		        EBPtr1--;
			EBPtr2 = EBPtr1;
			SStPtr = SavSSP;
			if (CMatch(&SamChr) == FAILURE) {
			    DBGFEX(3,DbgFNm,"FAILURE");
			    return FAILURE;
			}
			if (!SamChr) {
			    EBPtr1++;
			    EBPtr2 = SavEP2;
			    break;
			}
		    }
		    DBGFEX(3,DbgFNm,"SUCCESS");
		    return SUCCESS;
		case 'R':	/* ^ER match any alphanumeric */
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
		        if (Is_Alnum(*EBPtr1)) {
			    break;
			}
		    }
		    break;
		case 'S':	/* ^ES match any spaces/tabs */
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
		        if ((*EBPtr1 == SPACE) || (*EBPtr1 == TABCHR)) {
			    EBPtr2 = EBPtr1;
			    while (EBPtr1 > EndSAr) {
			        EBPtr1--;
				if ((*EBPtr1 != SPACE) &&
				    (*EBPtr1 != TABCHR)) {
				    EBPtr1++;
				    break;
				}
			    }
			    DBGFEX(3,DbgFNm,"SUCCESS");
			    return SUCCESS;
			}
		    }
		    break;
		case 'V':	/* ^EV match any lowercase char */
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
		        if (Is_Lower(*EBPtr1)) {
			    break;
			}
		    }
		    break;
		case 'W':	/* ^EW match any uppercase character */
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
		        if (Is_Upper(*EBPtr1)) {
		            break;
			}
		    }
		    break;
		case 'X':	/* ^EX match any char (==^X) */
		    break;
		case '<':	/* ^E<n> match char w/ASCII octal code n */
		    if (++SStPtr == SBfPtr) {
		        ErrMsg(ERR_ICE);
			DBGFEX(3,DbgFNm,"FAILURE, no ^E<> arg");
			return FAILURE;
		    }
		    TmpLng = 0;
		    while (Is_Digit(*SStPtr)) {
		        TmpLng = (TmpLng * 8) + (*SStPtr - '0');
			if (TmpLng > 127) {
			    ErrMsg(ERR_ICE);
			    DBGFEX(3,DbgFNm,"FAILURE");
			    return FAILURE;
			}
			if (++SStPtr == SBfPtr) {
			    ErrMsg(ERR_ICE);
			    DBGFEX(3,DbgFNm,"FAILURE");
			    return FAILURE;
			}
		    }
		    if (*SStPtr != '>') {
		        ErrMsg(ERR_ICE);
			DBGFEX(3,DbgFNm,"FAILURE");
			return FAILURE;
		    }
		    Charac = (unsigned char)TmpLng;
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
		        if (*EBPtr1 == Charac) {
			    break;
			}
		    }
		    break;
		case '[':	/* ^E[x1,x2,...] match any one of x1,x2,... */
		    if (++SStPtr == SBfPtr) {
		        ErrMsg(ERR_ICE);
			DBGFEX(3,DbgFNm,"FAILURE, no ^E[] arg");
			return FAILURE;
		    }
		    LstBeg = SStPtr;
		    for (; EBPtr1 >= EndSAr; --EBPtr1) {
			while (*SStPtr != ']') {
		            if (*SStPtr == ',') {
			        if (++SStPtr == SBfPtr) {
			            ErrMsg(ERR_ICE);
				    DBGFEX(3,DbgFNm,"FAILURE");
				    return FAILURE;
				}
			    } else {
			        EBPtr2 = EBPtr1;
				if (CMatch(&SamChr) == FAILURE) {
			            DBGFEX(3,DbgFNm,"FAILURE");
				    return FAILURE;
				}
				if (SamChr) {
			            while (*SStPtr != ']') {
				        if (++SStPtr == SBfPtr) {
				            ErrMsg(ERR_ICE);
					    DBGFEX(3,DbgFNm,"FAILURE");
					    return FAILURE;
					}
				    }
				    EBPtr2 = EBPtr1;
				    DBGFEX(3,DbgFNm,"SUCCESS");
				    return SUCCESS;
				}
				if (++SStPtr == SBfPtr) {
			            ErrMsg(ERR_ICE);
				    DBGFEX(3,DbgFNm,"FAILURE");
				    return FAILURE;
				}
			    }
			}
			SStPtr = LstBeg;
		    }
		    break;
		default:
		    ErrMsg(ERR_ICE);
		    DBGFEX(3,DbgFNm,"FAILURE, bad ^E arg");
		    return FAILURE;
	    } /* end of ^E switch */
	    break;
	default:	/* edit buffer char must match search string char */
	    if (SMFlag) {			/* if case dependence */
	        for (; EBPtr1 >= EndSAr; --EBPtr1) {
		    if (*EBPtr1 == *SStPtr) {
		        break;
		    }
		}
	    } else {			/* else case independence */
	        OtCase = Is_Upper(*SStPtr)
		             ? To_Lower(*SStPtr)
			     : To_Upper(*SStPtr);
		for (; EBPtr1 >= EndSAr; --EBPtr1) {
		    if ((*EBPtr1 == *SStPtr) || (*EBPtr1 == OtCase)) {
		        break;
		    }
		}
	    }
    } /* end of switch */
    EBPtr2 = EBPtr1;
    DBGFEX(3,DbgFNm,"SUCCESS");
    return SUCCESS;
}
Example #6
0
integer ExeX()			/* execute an X command */
{
	ptrdiff_t TmpSiz;

	DBGFEN(1,"ExeX",NULL);
	if (EStTop == EStBot) {			/* if no numeric argument */
		NArgmt = 1;			/* default is 1X */
	} else {
		UMinus();			/* if it's -X, make it -1X */
		if (GetNmA() == FAILURE) {	/* get numeric argument */
			DBGFEX(1,DbgFNm,"FAILURE, GetNmA() failed");
			return FAILURE;
		}
	}


	if (IncCBP() == FAILURE) {		/* move to char after X */
		DBGFEX(1,DbgFNm,"FAILURE, IncCBP() failed");
		return FAILURE;
	}

	if (FindQR() == FAILURE) {		/* find q-register values */
		DBGFEX(1,DbgFNm,"FAILURE, FindQR() failed");
		return FAILURE;
	}

	if (!(CmdMod & COLON)) {		/* if no colon modifier */
		if (QR->Start != NULL) {	/* if text area not empty */
			ZFree((voidptr)QR->Start);/* free allocated memory */
			QR->Start = QR->End_P1 = NULL;
		}
	}

	if ((CmdMod & MARGIS) == '\0') {	/* if it's nXq (not m,nXq) */
		NArgmt = Ln2Chr(NArgmt);
		if (NArgmt > 0) {
			if (MakRom((size_t)NArgmt) == FAILURE) {
				DBGFEX(1,DbgFNm,"FAILURE, MakRom() failed");
				return FAILURE;
			}
			MEMMOVE(QR->End_P1, GapEnd+1, (size_t)NArgmt);
			QR->End_P1 += NArgmt;
		} else if (NArgmt < 0) {
			if (MakRom((size_t)-NArgmt) == FAILURE) {
				DBGFEX(1,DbgFNm,"FAILURE, MakRom() failed");
				return FAILURE;
			}
			MEMMOVE(QR->End_P1, GapBeg+NArgmt, (size_t)-NArgmt);
			QR->End_P1 -= NArgmt;
		}
	} else if (NArgmt != MArgmt) {		/* else (it's m,nXq) */
		MEMMOVE(ErrTxt, "m,nX", 5);
		if (GetAra() == FAILURE) {
			DBGFEX(1,DbgFNm,"FAILURE, GetAra() failed");
			return FAILURE;
		}
		if ((AraBeg < GapBeg) && (AraEnd > GapEnd)) {
			TmpSiz = (GapBeg-AraBeg) + (AraEnd-GapEnd);
			if (TmpSiz > 0) {
				if (MakRom((size_t)TmpSiz) == FAILURE) {
					DBGFEX(1,DbgFNm,"FAILURE, MakRom() failed");
					return FAILURE;
				}
				MEMMOVE(QR->End_P1,
					AraBeg,
					(size_t)(GapBeg - AraBeg));
				QR->End_P1 += GapBeg-AraBeg;
				MEMMOVE(QR->End_P1,
					GapEnd+1,
					(size_t)(AraEnd - GapEnd));
				QR->End_P1 += AraEnd-GapEnd;
			}
		} else {			/* else area is contiguous */
			TmpSiz = (AraEnd - AraBeg) + 1;
			if (TmpSiz > 0) {
				if (MakRom((size_t)TmpSiz) == FAILURE) {
					DBGFEX(1,DbgFNm,"FAILURE, MakRom() failed");
					return FAILURE;
				}
				MEMMOVE(QR->End_P1, AraBeg, (size_t)TmpSiz);
				QR->End_P1 += TmpSiz;
			}
		}
	}

	CmdMod = '\0';			/* clear modifiers flags */

	DBGFEX(1,DbgFNm,"SUCCESS");
	return SUCCESS;
}