/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */ /* Match APL2 V1.0.0 *************************************************** * Yields 1 if arguments are same in structure and data, 0 otherwise. * ***********************************************************************/ #define INCLUDES APLCB #include "includes.h" Aplcb match(left,rite) Aplcb left,rite; { Errinit; Errstop; Iscalar; Matchok; Matchsub; extern int aplerr; int datatyp,i,ret=0; char *lp, *rp; if (errinit()) return(errstop(0,left,rite,NULL)); for(;;) { if ( left->aplrank != rite->aplrank || left->aplcount != rite->aplcount) break; datatyp = left->aplflags & (APLMASK + APLAPL); if (0 == (i = left->aplcount) && datatyp != (rite->aplflags & (APLMASK + APLAPL))) break; if (!matchok(&left, &rite, APLMASK + APLAPL)) { aplerr = 0; /* reset error code set by matchok */ break; } lp = left->aplptr.aplchar; rp = rite->aplptr.aplchar; ret = 1; while(i-- && ret && aplerr == 0) { ret = matchsub(datatyp,lp,rp); lp += left->aplsize; rp += rite->aplsize; } /* end while */ break; } return(errstop(0,left,rite,iscalar(ret))); }