teacl/src/execst.c

114 lines
5.9 KiB
C

/*****************************************************************************
ExeCSt()
This function executes a TECO command string. The string is pointed
to by CBfPtr. The last character in the string is pointed to by CStEnd.
*****************************************************************************/
#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 ExeCSt() /* execute command string */
{
DEFAULT status;
static DEFAULT (*FArray[])(VVOID) = {
/*NUL*/ ExeNul, /* ^A*/ ExeCtA, /* ^B*/ ZExCtB, /* ^C*/ ExeCtC,
/* ^D*/ ExeCtD, /* ^E*/ ExeCtE, /* ^F*/ ExeNYI, /* ^G*/ ExeIll,
/* ^H*/ ZExCtH, /* ^I*/ ExeCtI, /* LF*/ ExeNul, /* VT*/ ExeIll,
/* ^L*/ ExeCtL, /* CR*/ ExeNul, /* ^N*/ ExeCtN, /* ^O*/ ExeCtO,
/* ^P*/ ExeCtP, /* ^Q*/ ExeCtQ, /* ^R*/ ExeCtR, /* ^S*/ ExeCtS,
/* ^T*/ ExeCtT, /* ^U*/ ExeCtU, /* ^V*/ ExeCtV, /* ^W*/ ExeCtW,
/* ^X*/ ExeCtX, /* ^Y*/ ExeCtY, /* ^Z*/ ExeCtZ, /*ESC*/ ExeEsc,
/* ^\*/ ExeIll, /* ^]*/ ExeIll, /* ^^*/ ExeCCC, /* ^_*/ ExeUsc,
/* SP*/ ExeNul, /* ! */ ExeExc, /* " */ ExeDQu, /* # */ ExeOpr,
/* $ */ ExeEsc, /* % */ ExePrc, /* & */ ExeOpr, /* ' */ ExeNul,
/* ( */ ExeOpr, /* ) */ ExeRtP, /* * */ ExeOpr, /* + */ ExeOpr,
/* , */ ExeCom, /* - */ ExeOpr, /* . */ ExeDot, /* / */ ExeOpr,
/* 0 */ ExeDgt, /* 1 */ ExeDgt, /* 2 */ ExeDgt, /* 3 */ ExeDgt,
/* 4 */ ExeDgt, /* 5 */ ExeDgt, /* 6 */ ExeDgt, /* 7 */ ExeDgt,
/* 8 */ ExeDgt, /* 9 */ ExeDgt, /* : */ ExeCln, /* ; */ ExeSCl,
/* < */ ExeLst, /* = */ ExeEqu, /* > */ ExeGtr, /* ? */ ExeQes,
/* @ */ ExeAtS, /* A */ ExeA, /* B */ ExeB, /* C */ ExeC,
/* D */ ExeD, /* E */ ExeE, /* F */ ExeF, /* G */ ExeG,
/* H */ ExeH, /* I */ ExeI, /* J */ ExeJ, /* K */ ExeK,
/* L */ ExeL, /* M */ ExeM, /* N */ ExeN, /* O */ ExeO,
/* P */ ExeP, /* Q */ ExeQ, /* R */ ExeR, /* S */ ExeS,
/* T */ ExeT, /* U */ ExeU, /* V */ ExeV, /* W */ ExeW,
/* X */ ExeX, /* Y */ ExeY, /* Z */ ExeZ, /* [ */ ExeLBr,
/* \ */ ExeBSl, /* ] */ ExeRBr, /* ^ */ ExeCrt, /* _ */ ExeUnd,
/* ` */ ExeIll, /* a */ ExeA, /* b */ ExeB, /* c */ ExeC,
/* d */ ExeD, /* e */ ExeE, /* f */ ExeF, /* g */ ExeG,
/* h */ ExeH, /* i */ ExeI, /* j */ ExeJ, /* k */ ExeK,
/* l */ ExeL, /* m */ ExeM, /* n */ ExeN, /* o */ ExeO,
/* p */ ExeP, /* q */ ExeQ, /* r */ ExeR, /* s */ ExeS,
/* t */ ExeT, /* u */ ExeU, /* v */ ExeV, /* w */ ExeW,
/* x */ ExeX, /* y */ ExeY, /* z */ ExeZ, /* { */ ExeIll,
/* | */ ExeBar, /* } */ ExeIll, /* ~ */ ExeIll, /*DEL*/ ExeIll,
/*129*/ ExeIll, /*130*/ ExeIll, /*131*/ ExeIll, /*132*/ ExeIll,
/*133*/ ExeIll, /*134*/ ExeIll, /*135*/ ExeIll, /*136*/ ExeIll,
/*137*/ ExeIll, /*138*/ ExeIll, /*139*/ ExeIll, /*140*/ ExeIll,
/*141*/ ExeIll, /*142*/ ExeIll, /*143*/ ExeIll, /*144*/ ExeIll,
/*145*/ ExeIll, /*146*/ ExeIll, /*147*/ ExeIll, /*148*/ ExeIll,
/*149*/ ExeIll, /*150*/ ExeIll, /*151*/ ExeIll, /*152*/ ExeIll,
/*153*/ ExeIll, /*154*/ ExeIll, /*155*/ ExeIll, /*156*/ ExeIll,
/*157*/ ExeIll, /*158*/ ExeIll, /*159*/ ExeIll, /*160*/ ExeIll,
/*161*/ ExeIll, /*162*/ ExeIll, /*163*/ ExeIll, /*164*/ ExeIll,
/*165*/ ExeIll, /*166*/ ExeIll, /*167*/ ExeIll, /*168*/ ExeIll,
/*169*/ ExeIll, /*170*/ ExeIll, /*171*/ ExeIll, /*172*/ ExeIll,
/*173*/ ExeIll, /*174*/ ExeIll, /*175*/ ExeIll, /*176*/ ExeIll,
/*177*/ ExeIll, /*178*/ ExeIll, /*179*/ ExeIll, /*180*/ ExeIll,
/*181*/ ExeIll, /*182*/ ExeIll, /*183*/ ExeIll, /*184*/ ExeIll,
/*185*/ ExeIll, /*186*/ ExeIll, /*187*/ ExeIll, /*188*/ ExeIll,
/*189*/ ExeIll, /*190*/ ExeIll, /*191*/ ExeIll, /*192*/ ExeIll,
/*193*/ ExeIll, /*194*/ ExeIll, /*195*/ ExeIll, /*196*/ ExeIll,
/*197*/ ExeIll, /*198*/ ExeIll, /*199*/ ExeIll, /*200*/ ExeIll,
/*201*/ ExeIll, /*202*/ ExeIll, /*203*/ ExeIll, /*204*/ ExeIll,
/*205*/ ExeIll, /*206*/ ExeIll, /*207*/ ExeIll, /*208*/ ExeIll,
/*209*/ ExeIll, /*210*/ ExeIll, /*211*/ ExeIll, /*212*/ ExeIll,
/*213*/ ExeIll, /*214*/ ExeIll, /*215*/ ExeIll, /*216*/ ExeIll,
/*217*/ ExeIll, /*218*/ ExeIll, /*219*/ ExeIll, /*220*/ ExeIll,
/*221*/ ExeIll, /*222*/ ExeIll, /*223*/ ExeIll, /*224*/ ExeIll,
/*225*/ ExeIll, /*226*/ ExeIll, /*227*/ ExeIll, /*228*/ ExeIll,
/*229*/ ExeIll, /*230*/ ExeIll, /*231*/ ExeIll, /*232*/ ExeIll,
/*233*/ ExeIll, /*234*/ ExeIll, /*235*/ ExeIll, /*236*/ ExeIll,
/*237*/ ExeIll, /*238*/ ExeIll, /*239*/ ExeIll, /*240*/ ExeIll,
/*241*/ ExeIll, /*242*/ ExeIll, /*243*/ ExeIll, /*244*/ ExeIll,
/*245*/ ExeIll, /*246*/ ExeIll, /*247*/ ExeIll, /*248*/ ExeIll,
/*249*/ ExeIll, /*250*/ ExeIll, /*251*/ ExeIll, /*252*/ ExeIll,
/*253*/ ExeIll, /*254*/ ExeIll, /*255*/ ExeIll, /*256*/ ExeIll
};
DBGFEN(4,"ExeCSt",NULL);
while (CBfPtr <= CStEnd) { /* while more commands */
if (TraceM) { /* if trace mode is on */
EchoIt(*CBfPtr); /* display the command */
}
status = (*FArray[*CBfPtr])(); /* execute command */
#if CONSISTENCY_CHECKING
check_consistency();
#endif
#if CHECKSUM_CODE
check_code_checksums ();
#endif
ZCHKKB(); /* kludge for MS-DOS only */
if (GotCtC) { /* if got a control-C */
GotCtC = FALSE;
ErrMsg(ERR_XAB); /* XAB = execution aborted */
DBGFEX(4,DbgFNm,"SUCCESS");
return SUCCESS;
}
if (status == FAILURE) { /* did command fail? */
if (EtFlag & ET_MUNG_MODE) { /* if in mung mode */
TAbort(EXIT_FAILURE); /* ... terminate */
} else {
DBGFEX(4,DbgFNm,"FAILURE");
return FAILURE;
}
}
CBfPtr++; /* move to next command */
}
if (LStTop != LStBot) { /* if unclosed loop */
ErrUTC(); /* unterminated command */
}
DBGFEX(4,DbgFNm,"SUCCESS");
return SUCCESS;
}