Metropoli BBS
VIEWER: execnexs.c MODE: TEXT (ASCII)
/* Copyright (C) 1996 by Thomas Glen Smith.	All Rights Reserved. */
/* execnexs APL2 V1.0.0 ************************************************
* called by execnext for main processing loop.                         *
***********************************************************************/
#define INCLUDES APLCB+APLCHDEF+APLTOKEN+STDIO+TREE
#include "includes.h"
int execnexs(pfun,parg,op,varcnt,pnoexit,savelast,varsw)
Apltoken *pfun; /* w/b = next function token, or null. */
Apltoken *parg; /* w/b = next argument token, or null. */
Apltoken op;	 /* Working token. */
int *varcnt;	 /* w/b > 0 if simple variable name list. */
int *pnoexit;	 /* Initialized. */
int savelast;	 /* Initialized. */
int varsw;	 /* Initialized. */
{
	Axistest; Execindx; Execnexu; Lifo; Pop;
	extern Treelist treehdr;
	extern int aplerr;
	Apltoken tok,wrk;

	wrk = NULL; /* initialize */
	if (op != NULL)
		while (axistest(treehdr->avlexec->avloprst)) {
			varsw = 0; /* not common variable name list */
			op = execindx(op); /* handle indexing */
		}
	if (treehdr->avlexec->avloprst != NULL && savelast == LEFT_ARROW) {
		tok = lifo(&wrk,pop(&(treehdr->avlexec->avloprst)));
		if (varcnt != NULL && varsw) {
			if (tok->token_code != OPERAND_TOKEN) varsw = 0;
			else (*varcnt)++; /* count of names in list */
		}
	}
	if (op != NULL) {
		if (varcnt != NULL && varsw) {
			if (op->token_code != OPERAND_TOKEN) varsw = 0;
			else (*varcnt)++; /* count of names in list */
		}
		op = lifo(&wrk,op); /* push on holding stack */
		op = NULL;
	}
	return(execnexu(pfun,parg,&wrk,varcnt,pnoexit,varsw));
}
[ RETURN TO DIRECTORY ]