Metropoli BBS
VIEWER: execqfxi.c MODE: TEXT (ASCII)
/*Copyright (C) 1992, 1995 by Thomas Glen Smith.  All Rights Reserved.*/
/* execqfxi APL2 V1.0.0 ************************************************
* Called by execqfx and execqfxi to check for localized synonyms.      *
***********************************************************************/
#define INCLUDES APLCB+APLFUNCI+APLMEM+APLTOKEN+STDIO+TREE
#include "includes.h"
void execqfxi(fp)
Aplfunc fp; /* Function definition structure. */
{
	Aplclsub; Avladd; Avlsrch;
#include "quadext.h"
	extern int aplerr;
	Treelist mytree;
	Apltoken tok;
	Avlnode p;
	char *nameptr;

	/* First set up a local variable tree. */
	mytree = malloc(sizeof(struct treelist));
	mytree->treenext = NULL;
	mytree->avlhdr = NULL;
	/* Now search list of local variables */
	for (tok = fp->funcvars; tok != NULL && aplerr == 0;
		tok = tok->token_queue.token_next_ptr) {
		switch (tok->token_code) {
			case QUAD_CT:	nameptr = quadct; break;
			case QUAD_IO:	nameptr = quadio; break;
			default:		nameptr = tok->token_ptr.token_string;
		}
		if (NULL != avlsrch(mytree->avlhdr,nameptr))
			aplerr = 96; /* synonyms are bad */
		else p = avladd(&(mytree->avlhdr),nameptr,NULL);
	}
	/* Now search list of local labels */
	for (tok = fp->funclabs; tok != NULL && aplerr == 0;
		tok = tok->token_queue.token_next_ptr) {
		if (NULL != avlsrch(mytree->avlhdr,
			tok->token_ptr.token_string))
			aplerr = 97; /* synonyms are bad */
		else p = avladd(&(mytree->avlhdr),
			tok->token_ptr.token_string,NULL);
	}
	/* Now free up my local tree */
	aplclsub(mytree->avlhdr);
	free(mytree);
}
[ RETURN TO DIRECTORY ]