/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */ /* find APL2 V1.0.0 **************************************************** * Yields a boolean array where 1s mark the positions in rite that * * match left. * ***********************************************************************/ #define INCLUDES APLCB #include "includes.h" Aplcb find(left,rite) Aplcb left,rite; { Errinit; Errstop; Getcb; Intcopy; Matchok; void finda(Aplcb, Aplcb, Aplcb, int); extern int aplerr; Aplcb out=NULL; int d,i,*oip; for (;;) { if (errinit()) break; out = getcb(NULL, rite->aplcount, APLTEMP + APLINT, rite->aplrank, NULL); if (aplerr) break; if (out->aplrank > 1) /* copy dimensions if more than vector */ oip = intcopy(out->apldim, rite->apldim, out->aplrank, 1); if (out->aplcount == 0) break; i = 0; oip = intcopy(out->aplptr.aplint, &i, out->aplcount, 0); if (0 > (d = rite->aplrank - left->aplrank)) break; if (!matchok(&left, &rite, APLMASK + APLAPL)) { aplerr = 0; /* reset code set by matchok */ break; } finda(left,rite,out,d); /* More work to do. */ break; } return(errstop(0,left,rite,out)); }