/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */ /* execspeu APL2 V1.0.0 ************************************************ * Called by execspex and recursively by itself, to generate an Aplcb * * of shape identical to leftorig, but with all scalars replaced with * * integer containing the unique index to the corresponding item in * * the recursive ravel of leftorig. * ***********************************************************************/ #define INCLUDES APLCB #include "includes.h" Aplcb execspeu(leftorig, pnix) Aplcb leftorig; /* pattern Aplcb. */ int *pnix; /* next index value to use */ { Getcb; Intcopy; extern int aplerr; Aplcb *icb,*ocb,out,wrk; int i,j,o,*op,type; type = (leftorig->aplflags & APLAPL) ? APLAPL : APLINT; o = leftorig->aplcount; out = getcb(NULL, o, type, leftorig->aplrank, NULL); if (aplerr) return(NULL); if (out->aplrank > 1) /* rank higher than vector? */ intcopy(out->apldim,leftorig->apldim,out->aplrank,1); if (type == APLAPL) { icb = leftorig->aplptr.aplapl; ocb = out->aplptr.aplapl; while (o--) *ocb++ = execspeu(*icb++, pnix); } else { op = out->aplptr.aplint; while (o--) *op++ = (*pnix)++; } return(out); }