/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */ /* formdfy APL2 V1.0.0 ************************************************* * Formdfy is called by formdfs and formdfw, to produce a 2-element * * vector dim. dim[1] contains the product all dimensions of rite, * * except the last, and dim[2] is the last dimension of rite. * ***********************************************************************/ #define INCLUDES STDIO+APLCB #include "includes.h" Aplcb formdfy(rite) Aplcb rite; /* apl variable to be printed, marked permanent. */ { Endoper; Cat; Drop; Errstop; Ireduce; Iscalar; Itimes; Perm; Reshape; Shape; Take; Temp; extern int aplerr,indxorg; Aplcb dimcb,frmcb; int identity=1; frmcb = perm(cat(reshape(iscalar(2),iscalar(1)),shape(rite),indxorg)); /* frmcb = vector of "1 1" followed by shape of rite */ if (aplerr) return(errstop(0,NULL,NULL,frmcb)); dimcb = cat(ireduce(itimes,&identity,drop(iscalar(-1),frmcb),indxorg), take(iscalar(-1),frmcb),indxorg); /* 2 dimensions */ endoper(temp(frmcb)); return(errstop(0,NULL,NULL,dimcb)); }