Metropoli BBS
VIEWER: execnext.c MODE: TEXT (ASCII)
/* Copyright (C) 1996 by Thomas Glen Smith.	All Rights Reserved. */
/* execnext APL2 V1.0.0 ************************************************
* Called by dottran, eachtran, and slashtra.                           *
* See execnext.h for a description of function.                        *
***********************************************************************/
#include "execnext.h"
#define INCLUDES APLCB+APLCHDEF+APLTOKEN+STDIO+TREE
#include "includes.h"
int execnext(pfun,pax,parg,varcnt)
Apltoken *pfun; /* w/b = next function token, or null. */
Apltoken *pax;  /* w/b = next axis token, or null.	*/
Apltoken *parg; /* w/b = next argument token, or null. */
int *varcnt;	 /* w/b > 0 if simple variable name list. */
			 /* varcnt is not NULL only when execspex is calling. */
{
	Axistest; Execexee; Execnexs; Pop;
	extern Treelist treehdr;
	extern int aplerr;
	Apltoken op;
	int noexit,savelast,varsw=1;

	*pfun = *parg = *pax = op = NULL; /* initialize */
	if (varcnt != NULL) *varcnt = 0; /* initialize */
	else varsw=0;
	savelast = treehdr->lastfun;
	noexit = execexee(pfun,&op);
	if (*pfun == NULL && op == NULL) return(noexit);
	if (*pfun != NULL) {
		if (op != NULL) {
			aplerr = 999;
			exit(1);
		} /* never happen */
	}
	else varsw = execnexs(pfun,parg,op,varcnt,&noexit,savelast,varsw);
	if (*pfun != NULL) {
		if (noexit && axistest(treehdr->avlexec->avloprst)) {
			varsw = 0; /* not common variable name list */
			*pax = pop(&(treehdr->avlexec->avloprst));
		}
	}
	if (aplerr) noexit=0;
	return(noexit);
}
[ RETURN TO DIRECTORY ]