Metropoli BBS
VIEWER: innrprd.c MODE: TEXT (ASCII)
/*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,&ltopcnt,&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 */
}
[ RETURN TO DIRECTORY ]