1 /*****************************************************************************
2 
3 	ExeLBr()
4 
5 	This function executes a left-bracket ([) command.
6 	[q	Q-register push
7 
8 *****************************************************************************/
9 
10 #include "zport.h"		/* define portability identifiers */
11 #include "tecoc.h"		/* define general identifiers */
12 #include "defext.h"		/* define external global variables */
13 #include "deferr.h"		/* define identifiers for error messages */
14 
ExeLBr()15 DEFAULT ExeLBr()				/* execute [ command */
16 {
17 	QRptr		TmpQRp;
18 	ptrdiff_t	TmpSiz;
19 
20 #if DEBUGGING
21 	static char *DbgFNm = "ExeLBr";
22 	sprintf(DbgSBf, "QStTop = %d", QStTop);
23 	DbgFEn(1,DbgFNm,DbgSBf);
24 #endif
25 	if (IncCBP() == FAILURE) {
26 		DBGFEX(1,DbgFNm,"IncCBP() FAILURE");
27 		return FAILURE;
28 	}
29 
30 	if (FindQR() == FAILURE) {
31 		DBGFEX(1,DbgFNm,"FindQR() FAILURE");
32 		return FAILURE;
33 	}
34 
35 	if (++QStTop >= QRS_SIZE) {
36 		ErrMsg(ERR_PDO);		/* push-down list overflow */
37 		DBGFEX(1,DbgFNm,"ERR_PDO FAILURE");
38 		return FAILURE;
39 	}
40 
41 /*
42  * Copy QR to top of QStack
43  */
44 	TmpQRp = QR;
45 	QR = &QStack[QStTop];
46 	TmpSiz = TmpQRp->End_P1 - TmpQRp->Start;
47 	if (TmpSiz > 0) {
48 		if (MakRom((SIZE_T)TmpSiz) == FAILURE) {
49 			QR = TmpQRp;
50 			--QStTop;
51 
52 			DBGFEX(1,DbgFNm,"MakRom() FAILURE");
53 			return FAILURE;
54 		}
55 		MEMMOVE(QR->Start, TmpQRp->Start, (SIZE_T) TmpSiz);
56 		QR->End_P1 = QR->Start + TmpSiz;
57 	}
58 	QR->Number = TmpQRp->Number;
59 	QR = TmpQRp;
60 
61 	DBGFEX(1,DbgFNm,"SUCCESS");
62 	return SUCCESS;
63 }
64