/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */
/* eachdyaf APL2 V1.0.0 ************************************************
* Called from eachdyad when neither argument is empty. *
***********************************************************************/
#define INCLUDES APLDERIV+APLCB
#include "includes.h"
Aplcb eachdyaf(dp,left,rite)
Aplderiv dp; /* function describing derived function */
Aplcb left,rite; /* arguments */
{
Aplcopy; Conform; Eachalc; Eachdyag; Eachdyah; Eachwrk; Endoper;
Errstop; Getcb; Intcopy; Perm; Temp;
extern int aplerr;
Aplcb big, *cp, lit, out, wrk, wrkleft=NULL, wrkrite=NULL;
int *dimptr,i;
if (!conform(left,rite,0,&big,&lit))
return(errstop(17,left,rite,NULL)); /* not conformable */
if (NULL != (out = eachalc(big))) {
wrkleft = eachwrk(left);
wrkrite = eachwrk(rite);
if (aplerr == 0)
for (i=0, cp = out->aplptr.aplapl;
i < out->aplcount; i++) {
wrk = eachdyag(dp,&(dp->deriv_left),
eachdyah(i,left,wrkleft),
eachdyah(i,rite,wrkrite));
if (wrk == NULL) *cp++ = NULL;
else if (wrk->aplflags & APLTEMP) *cp++ = perm(wrk);
else *cp++ = aplcopy(wrk);
}
}
if (wrkleft) endoper(temp(wrkleft));
if (wrkrite) endoper(temp(wrkrite));
return(errstop(0,left,rite,out));
}