Metropoli BBS
VIEWER: takeck.c MODE: TEXT (ASCII)
/*Copyright (C) 1992, 1995 by Thomas Glen Smith.  All Rights Reserved.*/
/* takeck APL2 V1.0.0 **************************************************
* Called by both take and drop to do initial error checks.             *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
int takeck(pleft,prite)
Aplcb *pleft,*prite;
{
	Endoper; Errinit; Errstop; Imax; Iscalar; Ravel; Reshape; Shape;
	Vectin;
	extern int aplerr;
	Aplcb dimcb;

	if (errinit()) return(NOTOK);
	if ((*pleft)->aplrank > 1) {
		aplerr = 15; /* rank too large */
		return(NOTOK);
	}
	if (NULL == (*pleft = vectin(*pleft))) /*  perm. int. vector */
		return(NOTOK);
	if ((*prite)->aplrank == 0) /* convert scalar to array */
		*prite = reshape( /* reshape eliminates take recursion */
			ravel(reshape(shape(*pleft),iscalar(1))),
			*prite);
	else if ((*pleft)->aplcount != (*prite)->aplrank) {
		aplerr = 16;
		return(NOTOK);
	}
	return(OK);
}
[ RETURN TO DIRECTORY ]