/*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 */ }