Metropoli BBS
VIEWER: executg.c MODE: TEXT (ASCII)
/* Copyright (C) 1994 by Thomas Glen Smith.  All Rights Reserved. */
/* executg APL2 V1.0.0 *************************************************
* Called by executf and execalt to parse and execute an APL stmt.      *
***********************************************************************/
#define INCLUDES APLTOKEN+APLCHDEF+APLCB+TREE
#include "includes.h"
Aplcb executg(rite)
Aplcb rite;
{
	Errinit; Errstop; Execexec; Execfree; Execgetp; Execpars; Execpop;
	Pop;
	extern Treelist treehdr;
	extern int aplerr;
	Apltoken tok,tokhdr,toksave;
	Aplcb out=NULL;
	int i=0;

	for (;;) { /* to use break */
		if (errinit()) break;
		if (rite == NULL) {
			i = 999;
			break; /* internal error */
		}
		if (rite->aplrank > 1) {
			i = 56;
			break; /* m/v vec/sca */
		}
		if (!(rite->aplflags & APLCHAR)) {
			i = 57;
			break; /* m/b char */
		}
		tokhdr = execpars(rite->aplptr.aplchar,rite->aplcount);
		while (tokhdr != NULL && tokhdr->token_code == CAP_NULL)
			execfree(pop(&tokhdr)); /* pop/free input */
		toksave = treehdr->avltokhd;
		treehdr->avltokhd = tokhdr;
		if (aplerr || tokhdr == NULL) break;
		out = execgetp(execexec());
		execpop(&treehdr->avltokhd); /* clean up input stack */
		treehdr->avltokhd = toksave;
		break;
	}
	return(errstop(i,NULL,NULL,out));
}
[ RETURN TO DIRECTORY ]