/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */
/* encodei.h APL2 V1.0.0 ***********************************************
* Included in encodeb and encodec to do the encode. *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
void EP(left,rite,out,ldata,rdata,odata)
struct aplcb *left,*rite,*out;
TYPE *ldata,*rdata,*odata;
{
int i,j,k,m,
laxicnt,lbotcnt,ltopcnt,
oaxicnt,obotcnt,otopcnt;
TYPE holdrite,*ip,*jp,*kp,*leftbase,MOD(),*outbase,rad,wrk;
i = axispre(left,1,&laxicnt,&lbotcnt,<opcnt);
i = axispre(out ,1,&oaxicnt,&obotcnt,&otopcnt);
m = oaxicnt*obotcnt;
for (i=0; i < rite->aplcount; i++) { /* once per item in rite */
holdrite = *rdata++; /* rite item processed lbotcnt times */
outbase = odata++; /* next output base point */
leftbase = ldata; /* start of origin of left */
for (j=0; j < lbotcnt; j++) {
kp = (jp = outbase + j*rite->aplcount + m);
for (k=0; k < oaxicnt; k++)
*(kp -= obotcnt) = ZERO;
ip = leftbase++ + laxicnt*lbotcnt;
wrk = holdrite; /* rite item currently being processed */
for (k=0; k < laxicnt; k++) {
*(jp -= obotcnt) = MOD((rad=*(ip -= lbotcnt)),wrk);
if (rad == ZERO)
break;
wrk = (wrk - *jp) / rad;
}
}
}
}