Metropoli BBS
VIEWER: dyadicm.c MODE: TEXT (ASCII)
/* Copyright (C) 1993 by Thomas Glen Smith.  All Rights Reserved. */
/* dyadicm APL2 V1.0.0 *************************************************
* Called by cdyadic, dyadic, execdyat, idyadic, relative, and relativf.*
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
Aplcb dyadicm(left,rite,dataout,leftptr,riteptr,leftinc,riteinc,dtype)
Aplcb left, rite; /* operands */
double *dataout[], *leftptr[], *riteptr[];
int dtype, *leftinc, *riteinc;
{
     Aplcopy; Conform; Errstop; Getcb; Intcopy;
     Aplcb big,lit,out=NULL;
     int *dimbig,*dimleft,*dimptr,*dimrite,i,ok;

     if (!conform(left,rite,0,&big,&lit))
          return(errstop(17,left,rite,out)); /* not conformable */
     if (big->aplcount == 0 && dtype == APLAPL) { /* capture prototype */
     	out = aplcopy(big);
          if (out == NULL) return(errstop(0,left,rite,out));
          out->aplflags |= APLTEMP;
     } else {
	     out=getcb(NULL,big->aplcount,dtype+APLTEMP,big->aplrank,NULL);
          if (out == NULL) return(errstop(0,left,rite,out));
	     if (out->aplrank > 1)
	          dimptr=intcopy(out->apldim,big->apldim,out->aplrank,1);
     }
     *dataout=out->aplptr.apldata;
     *leftptr=left->aplptr.apldata;
     *riteptr=rite->aplptr.apldata;
     *leftinc=!(left->aplcount==1);
     *riteinc=!(rite->aplcount==1);
     return(out);
}
[ RETURN TO DIRECTORY ]