Metropoli BBS
VIEWER: execmonj.c MODE: TEXT (ASCII)
/* Copyright (C) 1993 by Thomas Glen Smith.	All Rights Reserved. */
/* execmonj - APL2 V1.0.0 **********************************************
* Called from execmonh, eachmona to apply a monadic function,		 *
* producing an Aplcb as output.								 *
***********************************************************************/
#define INCLUDES APLCB+APLDERIV
#include "includes.h"
Aplcb execmonj(ptype,fun,arg,ep,rite,axcb)
deriv_type ptype;
void *fun;
void *arg;
sub_dyad ep;
Aplcb rite;
Aplcb axcb;
{
	Axisdft; Errstop; Execaxiv; Execmonk;
	extern int aplerr;
	Axisdft; Errstop;
	Aplcb out=NULL;
	int axis;

	switch(ptype) {
		case FLR: /* funcmain, derived */
				out = ep.flr(fun,NULL,rite);
			break;
		case DIX: /* transpose, gradedn, gradeup */
				out = ep.dix(NULL,rite);
			break;
		case MEX: /* disclose */
			out = ep.mex(rite,axcb);
			break;
		case MOA: /* scalar monadics */
			if (rite->aplflags & APLAPL)
				out = execmonk(ptype,arg,ep,rite,NULL);
			else out = ep.moa(arg,rite);
			break;
		case MON:
			out = ep.mon(rite);
			break;
		case MOX:
			if (axcb)
				axis = execaxiv(axcb);
			else axis = axisdft((Codes *)fun,rite);
			out = ep.mox(rite,axis);
			break;
		default:
			aplerr = 73; /* unknown monadic */
			endoper(rite);
			break;
	} /* end switch */
	return(errstop(0,NULL,NULL,out));
}
[ RETURN TO DIRECTORY ]