teacl/src/clenup.c

51 lines
1.7 KiB
C

/*****************************************************************************
ClenUp()
This function "cleans up" in preparation for terminating TECO-C. All
open files are closed and memory is freed.
*****************************************************************************/
#include "zport.h" /* define portability identifiers */
#include "tecoc.h" /* define general identifiers */
#include "defext.h" /* define external global variables */
VVOID ClenUp (VVOID) /* cleanup for TECO-C abort */
{
QRptr QRp;
int i;
ZIClos(PINPFL); /* Close the primary and secondary... */
ZIClos(SINPFL); /* ...input streams, if they're open */
ZOClDe(POUTFL); /* Close the primary and secondary... */
ZOClDe(SOUTFL); /* ...output streams, if they're open */
/*
* free dynamically allocated buffers
*/
if (CBfBeg) ZFree((voidptr)CBfBeg); /* the command buffer */
if (DBfBeg) ZFree((voidptr)DBfBeg); /* the digit buffer */
if (EBfBeg) ZFree((voidptr)EBfBeg); /* the edit buffer */
if (FBfBeg) ZFree((voidptr)FBfBeg); /* the filename buffer */
if (SBfBeg) ZFree((voidptr)SBfBeg); /* the search string buffer */
/*
* free the global [0-35] and main-level local [36-71] Q-registers,
* and then the Q-register stack.
*/
for (QRp = QRgstr, i = 0; i < 72; ++i, ++QRp) {
if (QRp->Start != NULL) {
ZFree((voidptr)QRp->Start);
}
}
for (QRp = QStack, i = 0; i < QRS_SIZE; ++i, ++QRp) {
if (QRp->Start != NULL) {
ZFree((voidptr)QRp->Start);
}
}
ZClnUp(); /* do system-dependent cleanup */
#if DEBUGGING
{
/*
* at this point, there shouldn't be any block malloc'ed by TECO-C.
* except if we're here because we EX'ed out of a macro, and we can't
* get to the ZBf buffer allocated in ExeEI, so the ZBf buffer is
* left hanging.
*/
}
#endif
}