1 /*****************************************************************************
2
3 ClenUp()
4
5 This function "cleans up" in preparation for terminating TECO-C. All
6 open files are closed and memory is freed.
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
ClenUp(VVOID)14 VVOID ClenUp (VVOID) /* cleanup for TECO-C abort */
15 {
16 QRptr QRp;
17 int i;
18
19 ZIClos(PINPFL); /* Close the primary and secondary... */
20 ZIClos(SINPFL); /* ...input streams, if they're open */
21
22 ZOClDe(POUTFL); /* Close the primary and secondary... */
23 ZOClDe(SOUTFL); /* ...output streams, if they're open */
24
25 /*
26 * free dynamically allocated buffers
27 */
28
29 if (CBfBeg) ZFree((voidptr)CBfBeg); /* the command buffer */
30 if (DBfBeg) ZFree((voidptr)DBfBeg); /* the digit buffer */
31 if (EBfBeg) ZFree((voidptr)EBfBeg); /* the edit buffer */
32 if (FBfBeg) ZFree((voidptr)FBfBeg); /* the filename buffer */
33 if (SBfBeg) ZFree((voidptr)SBfBeg); /* the search string buffer */
34
35 /*
36 * free the global [0-35] and main-level local [36-71] Q-registers,
37 * and then the Q-register stack.
38 */
39
40 for (QRp = QRgstr, i = 0; i < 72; ++i, ++QRp) {
41 if (QRp->Start != NULL) {
42 ZFree((voidptr)QRp->Start);
43 }
44 }
45 for (QRp = QStack, i = 0; i < QRS_SIZE; ++i, ++QRp) {
46 if (QRp->Start != NULL) {
47 ZFree((voidptr)QRp->Start);
48 }
49 }
50 ZClnUp(); /* do system-dependent cleanup */
51
52 #if DEBUGGING
53 {
54 /*
55 * at this point, there shouldn't be any block malloc'ed by TECO-C.
56 * except if we're here because we EX'ed out of a macro, and we can't
57 * get to the ZBf buffer allocated in ExeEI, so the ZBf buffer is
58 * left hanging.
59 */
60 }
61 #endif
62 }
63