51 lines
1.7 KiB
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
|
|
}
|