/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */
/* nwisea APL2 V1.0.0 **************************************************
* Called from nwisec to complete nwise processing. Labs is guaranteed *
* to be greater than 1, the input and output data types either match, *
* or the input is APLCHAR, output is APLINT, code is EQNE, and labs is *
* 2. Input is not nested. *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
typedef void (*Pep)(void*,void*,void*);
Aplcb nwisea(pep,rite,lef,labs,datacnt,outype,axis,axicnt,naxicnt,botcnt,
topcnt)
Pep pep;
Aplcb rite;
int lef,labs,datacnt,outype,axis,axicnt,naxicnt,botcnt,topcnt;
{
Chrcopy; Getcb; Intcopy;
Aplcb nwiseb(Aplcb,int,int,int,int);
extern int aplerr;
Aplcb out=NULL;
int bump,i,*ip,j,k,m;
char *icp,*jcp,*kcp,*ocp,*wcp;
out = nwiseb(rite,datacnt,outype,axis,naxicnt);
if (out->aplcount == 0) return(out); /* all done */
bump = botcnt * rite->aplsize;
if (lef < 0) bump = -bump;
for (i = 0; i < topcnt; i++) {
icp=rite->aplptr.aplchar+(i*botcnt* axicnt)*rite->aplsize;
jcp=out->aplptr.aplchar +(i*botcnt*naxicnt)*out->aplsize;
for (j = 0; j < botcnt; j++)
for (m = naxicnt; m > 0; m--) {
kcp=icp+(j+(axicnt-m)*botcnt)*rite->aplsize;
ocp=jcp+(j+(naxicnt-m)*botcnt)*out->aplsize;
if (lef < 0) kcp += (labs - 1) * bump;
wcp=chrcopy(ocp,kcp,rite->aplsize,1);
for (k = 1; k < labs; k++) {
kcp -= bump;
(*pep)(kcp, ocp, ocp);
}
}
}
return(out);
}