Metropoli BBS
VIEWER: getfact.c MODE: TEXT (ASCII)
/*Copyright (C) 1992, 1995 by Thomas Glen Smith.  All Rights Reserved.*/
/* getfact APL2 V1.0.0 *************************************************
* Called by transpot to obtain skip factors based on the               *
* dimensions passed as argument, e.g. if argument is the vector 2 3 4, *
* the skip factors returned will be 12 4 1. If rite isn't scalar, it   *
* is assumed to be a vector.                                           *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
Aplcb getfact(rite)
Aplcb rite;
{
	Cat; Drop; Endoper; Errstop; Iscalar; Iscan; Itimes; Perm; Reverse;
	extern int indxorg;
	int itimesid=1;
	Aplcb out;

	if (rite->aplcount)
		out = perm(reverse(			/* Contains a factor for each  */
			drop(	/* axis of rite giving the number of elements */
				iscalar(-1),	/* skipped when the corresponding   */
				cat(			/* index is bumped by 1. If rite has*/
					iscalar(1), /* dimensions 2 3 4, factor will  */
					iscan(itimes,&itimesid, /* be 12 4 1. This is */
						reverse(rite,indxorg),	 /* the same as */
						indxorg),			 /* `R-1U1,X\`Rrite. */
					indxorg)),
			indxorg));
	else {
		out = perm(iscalar(1));
		endoper(rite);
	}
	return(errstop(0,NULL,NULL,out));
}
[ RETURN TO DIRECTORY ]