1 /*****************************************************************************
2 
3 	ExeCSt()
4 
5 	This function executes a TECO command string.  The string is pointed
6 to by CBfPtr.  The last character in the string is pointed to by CStEnd.
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 
ExeCSt()15 DEFAULT ExeCSt()		/* execute command string */
16 {
17 	DEFAULT status;
18 	static DEFAULT (*FArray[])(VVOID) = {
19 /*NUL*/ ExeNul,   /* ^A*/ ExeCtA,   /* ^B*/ ZExCtB,   /* ^C*/ ExeCtC,
20 /* ^D*/ ExeCtD,   /* ^E*/ ExeCtE,   /* ^F*/ ExeNYI,   /* ^G*/ ExeIll,
21 /* ^H*/ ZExCtH,   /* ^I*/ ExeCtI,   /* LF*/ ExeNul,   /* VT*/ ExeIll,
22 /* ^L*/ ExeCtL,   /* CR*/ ExeNul,   /* ^N*/ ExeCtN,   /* ^O*/ ExeCtO,
23 /* ^P*/ ExeCtP,   /* ^Q*/ ExeCtQ,   /* ^R*/ ExeCtR,   /* ^S*/ ExeCtS,
24 /* ^T*/ ExeCtT,   /* ^U*/ ExeCtU,   /* ^V*/ ExeCtV,   /* ^W*/ ExeCtW,
25 /* ^X*/ ExeCtX,   /* ^Y*/ ExeCtY,   /* ^Z*/ ExeCtZ,   /*ESC*/ ExeEsc,
26 /* ^\*/ ExeIll,   /* ^]*/ ExeIll,   /* ^^*/ ExeCCC,   /* ^_*/ ExeUsc,
27 /* SP*/ ExeNul,   /* ! */ ExeExc,   /* " */ ExeDQu,   /* # */ ExeOpr,
28 /* $ */ ExeEsc,   /* % */ ExePrc,   /* & */ ExeOpr,   /* ' */ ExeNul,
29 /* ( */ ExeOpr,   /* ) */ ExeRtP,   /* * */ ExeOpr,   /* + */ ExeOpr,
30 /* , */ ExeCom,   /* - */ ExeOpr,   /* . */ ExeDot,   /* / */ ExeOpr,
31 /* 0 */ ExeDgt,   /* 1 */ ExeDgt,   /* 2 */ ExeDgt,   /* 3 */ ExeDgt,
32 /* 4 */ ExeDgt,   /* 5 */ ExeDgt,   /* 6 */ ExeDgt,   /* 7 */ ExeDgt,
33 /* 8 */ ExeDgt,   /* 9 */ ExeDgt,   /* : */ ExeCln,   /* ; */ ExeSCl,
34 /* < */ ExeLst,   /* = */ ExeEqu,   /* > */ ExeGtr,   /* ? */ ExeQes,
35 /* @ */ ExeAtS,   /* A */ ExeA,     /* B */ ExeB,     /* C */ ExeC,
36 /* D */ ExeD,     /* E */ ExeE,     /* F */ ExeF,     /* G */ ExeG,
37 /* H */ ExeH,     /* I */ ExeI,     /* J */ ExeJ,     /* K */ ExeK,
38 /* L */ ExeL,     /* M */ ExeM,     /* N */ ExeN,     /* O */ ExeO,
39 /* P */ ExeP,     /* Q */ ExeQ,     /* R */ ExeR,     /* S */ ExeS,
40 /* T */ ExeT,     /* U */ ExeU,     /* V */ ExeV,     /* W */ ExeW,
41 /* X */ ExeX,     /* Y */ ExeY,     /* Z */ ExeZ,     /* [ */ ExeLBr,
42 /* \ */ ExeBSl,   /* ] */ ExeRBr,   /* ^ */ ExeCrt,   /* _ */ ExeUnd,
43 /* ` */ ExeIll,   /* a */ ExeA,     /* b */ ExeB,     /* c */ ExeC,
44 /* d */ ExeD,     /* e */ ExeE,     /* f */ ExeF,     /* g */ ExeG,
45 /* h */ ExeH,     /* i */ ExeI,     /* j */ ExeJ,     /* k */ ExeK,
46 /* l */ ExeL,     /* m */ ExeM,     /* n */ ExeN,     /* o */ ExeO,
47 /* p */ ExeP,     /* q */ ExeQ,     /* r */ ExeR,     /* s */ ExeS,
48 /* t */ ExeT,     /* u */ ExeU,     /* v */ ExeV,     /* w */ ExeW,
49 /* x */ ExeX,     /* y */ ExeY,     /* z */ ExeZ,     /* { */ ExeIll,
50 /* | */ ExeBar,   /* } */ ExeIll,   /* ~ */ ExeIll,   /*DEL*/ ExeIll,
51 /*129*/ ExeIll,   /*130*/ ExeIll,   /*131*/ ExeIll,   /*132*/ ExeIll,
52 /*133*/ ExeIll,   /*134*/ ExeIll,   /*135*/ ExeIll,   /*136*/ ExeIll,
53 /*137*/ ExeIll,   /*138*/ ExeIll,   /*139*/ ExeIll,   /*140*/ ExeIll,
54 /*141*/ ExeIll,   /*142*/ ExeIll,   /*143*/ ExeIll,   /*144*/ ExeIll,
55 /*145*/ ExeIll,   /*146*/ ExeIll,   /*147*/ ExeIll,   /*148*/ ExeIll,
56 /*149*/ ExeIll,   /*150*/ ExeIll,   /*151*/ ExeIll,   /*152*/ ExeIll,
57 /*153*/ ExeIll,   /*154*/ ExeIll,   /*155*/ ExeIll,   /*156*/ ExeIll,
58 /*157*/ ExeIll,   /*158*/ ExeIll,   /*159*/ ExeIll,   /*160*/ ExeIll,
59 /*161*/ ExeIll,   /*162*/ ExeIll,   /*163*/ ExeIll,   /*164*/ ExeIll,
60 /*165*/ ExeIll,   /*166*/ ExeIll,   /*167*/ ExeIll,   /*168*/ ExeIll,
61 /*169*/ ExeIll,   /*170*/ ExeIll,   /*171*/ ExeIll,   /*172*/ ExeIll,
62 /*173*/ ExeIll,   /*174*/ ExeIll,   /*175*/ ExeIll,   /*176*/ ExeIll,
63 /*177*/ ExeIll,   /*178*/ ExeIll,   /*179*/ ExeIll,   /*180*/ ExeIll,
64 /*181*/ ExeIll,   /*182*/ ExeIll,   /*183*/ ExeIll,   /*184*/ ExeIll,
65 /*185*/ ExeIll,   /*186*/ ExeIll,   /*187*/ ExeIll,   /*188*/ ExeIll,
66 /*189*/ ExeIll,   /*190*/ ExeIll,   /*191*/ ExeIll,   /*192*/ ExeIll,
67 /*193*/ ExeIll,   /*194*/ ExeIll,   /*195*/ ExeIll,   /*196*/ ExeIll,
68 /*197*/ ExeIll,   /*198*/ ExeIll,   /*199*/ ExeIll,   /*200*/ ExeIll,
69 /*201*/ ExeIll,   /*202*/ ExeIll,   /*203*/ ExeIll,   /*204*/ ExeIll,
70 /*205*/ ExeIll,   /*206*/ ExeIll,   /*207*/ ExeIll,   /*208*/ ExeIll,
71 /*209*/ ExeIll,   /*210*/ ExeIll,   /*211*/ ExeIll,   /*212*/ ExeIll,
72 /*213*/ ExeIll,   /*214*/ ExeIll,   /*215*/ ExeIll,   /*216*/ ExeIll,
73 /*217*/ ExeIll,   /*218*/ ExeIll,   /*219*/ ExeIll,   /*220*/ ExeIll,
74 /*221*/ ExeIll,   /*222*/ ExeIll,   /*223*/ ExeIll,   /*224*/ ExeIll,
75 /*225*/ ExeIll,   /*226*/ ExeIll,   /*227*/ ExeIll,   /*228*/ ExeIll,
76 /*229*/ ExeIll,   /*230*/ ExeIll,   /*231*/ ExeIll,   /*232*/ ExeIll,
77 /*233*/ ExeIll,   /*234*/ ExeIll,   /*235*/ ExeIll,   /*236*/ ExeIll,
78 /*237*/ ExeIll,   /*238*/ ExeIll,   /*239*/ ExeIll,   /*240*/ ExeIll,
79 /*241*/ ExeIll,   /*242*/ ExeIll,   /*243*/ ExeIll,   /*244*/ ExeIll,
80 /*245*/ ExeIll,   /*246*/ ExeIll,   /*247*/ ExeIll,   /*248*/ ExeIll,
81 /*249*/ ExeIll,   /*250*/ ExeIll,   /*251*/ ExeIll,   /*252*/ ExeIll,
82 /*253*/ ExeIll,   /*254*/ ExeIll,   /*255*/ ExeIll,   /*256*/ ExeIll
83 	};
84 
85 	DBGFEN(4,"ExeCSt",NULL);
86 
87 	while (CBfPtr <= CStEnd) {		/* while more commands */
88 		if (TraceM) {			/* if trace mode is on */
89 			EchoIt(*CBfPtr);	/* display the command */
90 		}
91 
92 		status = (*FArray[*CBfPtr])();	/* execute command */
93 
94 #if CONSISTENCY_CHECKING
95 		check_consistency();
96 #endif
97 
98 #if CHECKSUM_CODE
99 		check_code_checksums ();
100 #endif
101 
102 		ZCHKKB();			/* kludge for MS-DOS only */
103 
104 		if (GotCtC) {			/* if got a control-C */
105 			GotCtC = FALSE;
106 			ErrMsg(ERR_XAB);	/* XAB = execution aborted */
107 			DBGFEX(4,DbgFNm,"SUCCESS");
108 			return SUCCESS;
109 		}
110 
111 		if (status == FAILURE) {	/* did command fail? */
112 			if (EtFlag & ET_MUNG_MODE) {	/* if in mung mode */
113 				TAbort(EXIT_FAILURE);	/* ... terminate */
114 			} else {
115 				DBGFEX(4,DbgFNm,"FAILURE");
116 				return FAILURE;
117 			}
118 		}
119 
120 		CBfPtr++;			/* move to next command */
121 	}
122 
123 	if (LStTop != LStBot) {			/* if unclosed loop */
124 		ErrUTC();			/* unterminated command */
125 	}
126 
127 	DBGFEX(4,DbgFNm,"SUCCESS");
128 
129 	return SUCCESS;
130 }
131