/*Copyright (C) 1992, 1996 by Thomas Glen Smith. All Rights Reserved.*/
/* innrprd APL2 V1.0.0 *************************************************
* Does inner product for all matching data types. *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
Aplcb innrprd(opera,operb,identity,left,rite)
double (*opera)(),(*operb)(),*identity;
Aplcb left,rite;
{
Innrcom; Innrprdb; Innrprdc; Innrprdd; Matchok;
int datatyp,i,laxicnt,laxis,lbotcnt,lincr,ltopcnt,
raxicnt,rbotcnt,rincr,rtopcnt;
double *dataout,*ldata,*rdata;
Aplcb out;
if (!matchok(&left,&rite,APLMASK))
return(NULL);
out = innrcom(1,left,rite,&laxis,
&laxicnt,&lbotcnt,<opcnt,&lincr,
&raxicnt,&rbotcnt,&rtopcnt,&rincr,
(int *)&datatyp,(char **)&dataout,
(char **)&ldata,(char **)&rdata);
if (out == NULL)
return(NULL);
switch(left->aplflags & APLMASK) {
case APLNUMB:
return(innrprdb(left,rite,opera,operb,identity,
out,laxis,dataout,ldata,rdata,
laxicnt,lbotcnt,ltopcnt,lincr,
raxicnt,rbotcnt,rtopcnt,rincr));
case APLINT:
return(innrprdc(left,rite,
(int (*)())opera,(int (*)())operb,(int *)identity,
out,laxis,(int *)dataout,(int *)ldata,(int *)rdata,
laxicnt,lbotcnt,ltopcnt,lincr,
raxicnt,rbotcnt,rtopcnt,rincr));
case APLCHAR:
return(innrprdd(left,rite,
(int (*)())opera,(int (*)())operb,(int *)identity,
out,laxis,(int *)dataout,(char *)ldata,(char *)rdata,
laxicnt,lbotcnt,ltopcnt,lincr,
raxicnt,rbotcnt,rtopcnt,rincr));
} /* end switch */
}