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