53 lines
1.4 KiB
C
53 lines
1.4 KiB
C
/*****************************************************************************
|
|
ExeLBr()
|
|
This function executes a left-bracket ([) command.
|
|
[q Q-register push
|
|
*****************************************************************************/
|
|
#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 ExeLBr() /* execute [ command */
|
|
{
|
|
QRptr TmpQRp;
|
|
ptrdiff_t TmpSiz;
|
|
#if DEBUGGING
|
|
static char *DbgFNm = "ExeLBr";
|
|
sprintf(DbgSBf, "QStTop = %d", QStTop);
|
|
DbgFEn(1,DbgFNm,DbgSBf);
|
|
#endif
|
|
if (IncCBP() == FAILURE) {
|
|
DBGFEX(1,DbgFNm,"IncCBP() FAILURE");
|
|
return FAILURE;
|
|
}
|
|
if (FindQR() == FAILURE) {
|
|
DBGFEX(1,DbgFNm,"FindQR() FAILURE");
|
|
return FAILURE;
|
|
}
|
|
if (++QStTop >= QRS_SIZE) {
|
|
ErrMsg(ERR_PDO); /* push-down list overflow */
|
|
DBGFEX(1,DbgFNm,"ERR_PDO FAILURE");
|
|
return FAILURE;
|
|
}
|
|
/*
|
|
* Copy QR to top of QStack
|
|
*/
|
|
TmpQRp = QR;
|
|
QR = &QStack[QStTop];
|
|
TmpSiz = TmpQRp->End_P1 - TmpQRp->Start;
|
|
if (TmpSiz > 0) {
|
|
if (MakRom((SIZE_T)TmpSiz) == FAILURE) {
|
|
QR = TmpQRp;
|
|
--QStTop;
|
|
DBGFEX(1,DbgFNm,"MakRom() FAILURE");
|
|
return FAILURE;
|
|
}
|
|
MEMMOVE(QR->Start, TmpQRp->Start, (SIZE_T) TmpSiz);
|
|
QR->End_P1 = QR->Start + TmpSiz;
|
|
}
|
|
QR->Number = TmpQRp->Number;
|
|
QR = TmpQRp;
|
|
DBGFEX(1,DbgFNm,"SUCCESS");
|
|
return SUCCESS;
|
|
}
|