Metropoli BBS
VIEWER: execspeg.c MODE: TEXT (ASCII)
/* Copyright (C) 1993 by Thomas Glen Smith.	All Rights Reserved. */
/* execspeg APL2 V1.0.0 ************************************************
* Called by execspek, execspet, and execspez to evaluate the left      *
* operand to the assignment.	In the case of selective specification,  *
* this will produce the indices for the selective specification.       *
* Otherwise, it will produce the object to assign to for normal        *
* assignment.                                                          *
***********************************************************************/
#define INCLUDES APLCHDEF+APLTOKEN+APLCB+TREE
#include "includes.h"
Aplcb execspeg(tok, axistok, op, psw)
Apltoken tok,	   /* Token for E in e.g. (Er)#n	 */
	    axistok, /* Token for x in e.g. (E[x]r)#n */
	    op;	   /* Token for r in e.g. (Er)#n	 */
int	   *psw;	   /* Setting of NOT_WHOLE_ARRAY copied here. */
{
	Errstop; Execexed; Execexek; Execgetp; Lifo;
	extern Treelist treehdr;
	extern int aplerr;
	int i;

	if (op)
		op = lifo(&(treehdr->avlexec->avloprst), op);
	if (axistok)
		axistok = lifo(&(treehdr->avlexec->avlfunst),axistok);
	if (tok)
		tok = lifo(&(treehdr->avlexec->avlfunst),tok);
	i = treehdr->treeflag; /* save */
	execexed(); /* mainline expression evaluation */
	*psw = treehdr->treeflag & NOT_WHOLE_ARRAY;
	treehdr->treeflag = i; /* restore */
	return(errstop(0,NULL,NULL,execgetp(execexek())));
}
[ RETURN TO DIRECTORY ]