Metropoli BBS
VIEWER: partitp.c MODE: TEXT (ASCII)
/* Copyright (C) 1993 by Thomas Glen Smith.  All Rights Reserved. */
/* partitp APL2 V1.0.0 *************************************************
* Called by partito to create the next partition.                      *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
Aplcb partitp(out,rite,lead,n,trail,top,oaxi,raxi,botcnt,axis)
Aplcb out;	/* Variable to which selected items are assigned. */
Aplcb rite;	/* Variable from which items are selected. */
int lead;		/* Number of items to drop from start of candidates. */
int n;		/* Number of items to go in this partition. */
int trail;     /* Number of items to drop from end of candidates. */
int top;		/* Index (rel 0) along items above axis. */
int oaxi;		/* Index (rel 0) in axis to next in output. */
int raxi;		/* Index (rel 0) in axis beyond last in candidates. */
int botcnt;	/* Count of elements separating each item along axis. */
int axis;		/* Axis (rel 0) along which partitioning is to be done. */
{
	Dtacopy; Getcb;
	Aplcb new,*op;
	int bot,datatyp,oaxicnt,raxicnt;
	char *ip;

	datatyp = rite->aplflags & (APLMASK | APLAPL);
	oaxicnt = *(out->apldim + axis);
	raxicnt = *(rite->apldim + axis);
	op = out->aplptr.aplapl + top*oaxicnt*botcnt + oaxi*botcnt;
	ip = rite->aplptr.aplchar + rite->aplsize *
		(top*raxicnt*botcnt + (raxi-n-trail)*botcnt);
	for(bot = 0; bot < botcnt; bot++) {
		new = getcb(NULL,n,datatyp,1,NULL);
		*(op + bot) = new;
		if (n && new != NULL) {
			dtacopy(new->aplptr.aplchar,
				ip + (bot * rite->aplsize),
				n,botcnt,datatyp);
		}
	}
}
[ RETURN TO DIRECTORY ]