Metropoli BBS
VIEWER: aplclean.c MODE: TEXT (ASCII)
/*Copyright (C) 1992, 1995 by Thomas Glen Smith.  All Rights Reserved.*/
/* aplclean APL2 V1.0.0 ************************************************
* Called by apl at termination to free all storage currently allocated.*
***********************************************************************/
#define INCLUDES APLCB+APLMEM+TREE
#include "includes.h"
void aplclean(void)
{
	Aplclsub; Execterm;
	extern char *aplfile; /* WSID */
	extern Treelist treehdr; /* variable tree stack */
	Treelist workhdr;

	if (aplfile != NULL) {
		free(aplfile); /* free WSID string */
		aplfile = NULL;
	}
	if (treehdr == NULL) return; /* nothing to free */
	while (NULL != (workhdr = (Treelist) treehdr)) {
		while (NULL != treehdr->avlexec)
			execterm(); /* Go free execstk element. */
		treehdr = workhdr->treenext; /* pop tree stack */
		aplclsub(workhdr->avlhdr); /* pass top of tree */
		free(workhdr); /* free tree stack element */
	}
}
void aplclsub(node)
Avlnode node; /* points to node of binary tree */
{
	Leafdel;

	if (node == NULL) return;
	aplclsub(node->left_child); /* free left branch, if any */
	aplclsub(node->rite_child); /* free right branch, if any */
	leafdel(node->avlleaf); /* free this leaf, if any */
	free(node->avlname); /* free name string */
	free(node); /* free this node */
}
[ RETURN TO DIRECTORY ]