Metropoli BBS
VIEWER: aplerase.c MODE: TEXT (ASCII)
/*Copyright (C) 1992, 1995 by Thomas Glen Smith.  All Rights Reserved.*/
/* aplerase APL2 V1.0.0 ************************************************
* Called from aplwksp to do )ERASE.                                    *
***********************************************************************/
#define INCLUDES APLCB+APLTOKEN+STRING+TREE
#include "includes.h"
void aplerase(rite,cp,cpend)
Aplcb rite;	/* Aplcb for command text. */
char *cp;		/* Pointer to char immediately after right parenthesis. */
char *cpend;	/* Pointer to end of command text. */
{
	Endoper; Execmsg; Execpars; Execpop; Execqext; Execqncs; Leafdel;
	Treenode;
	extern int aplerr;
	Apltoken tok,tokhdr;
	Avlnode p;
	Aplcb cb;

	for (tok = tokhdr = execpars(cp,cpend-cp);
		tok != NULL && aplerr == 0;
		tok = tok->token_queue.token_next_ptr) {
		if (tok->token_code != OPERAND_TOKEN)
			aplerr = 58; /* syntax error */
		else if (NULL != (p = treenode(tok->token_ptr.token_string))
			&& NULL != (cb = p->avlleaf) && 
			!(cb->aplflags & APLLABEL)) {
			if (cb->aplflags & APLGROUP)
				endoper(execqncs(execqext,cb)); /* delete group */
			leafdel(p->avlleaf); /* free func., grp. or var. */
			p->avlleaf = NULL; /* indicate name available */
		}
		else execmsg(tok->token_ptr.token_string,
			strlen(tok->token_ptr.token_string),0,"not found");
	}
	execpop(&tokhdr); /* pop and free tokens on stack */
}
[ RETURN TO DIRECTORY ]