/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */ /* aplmatci APL2 V1.0.0 ************************************************ * Called by aplmatch, without, and recursively by itself. Yields 1 if * * ld and rd are identical in shape and value. * * One of these states must exist pertaining to data types: * * 1) Types are equal. Can be any of the possible types. * * 2) Types are both APL_NUMERIC (APLINT, APLNUMB, or APLCPLEX). * * 3) One of the two types must be APLAPL. * ***********************************************************************/ #define INCLUDES APLCB #include "includes.h" int aplmatci(Apluptr ld, Apluptr rd, int lefttype, int ritetype) { Aplmatch; Aplmatci; Aplmatcj; Eq; Xeq; extern int aplerr; Aplcb cb; Apluptr dataptr; int cbtype,datatype; double xl[2],xr[2]; if (lefttype == APLAPL || ritetype == APLAPL) return(aplmatck(ld, rd, lefttype, ritetype)); if (lefttype == APLCPLX || ritetype == APLCPLX) { aplmatcj(ld, lefttype, xl); aplmatcj(rd, ritetype, xr); return(xeq(xl,xr)); } switch(lefttype | ritetype) { case APLCHAR: return(*ld.aplchar == *rd.aplchar); case APLINT: return(*ld.aplint == *rd.aplint); case APLNUMB: return(eq(*ld.apldata,*rd.apldata)); case APLNUMB + APLINT: if (lefttype == APLNUMB) return(eq(*ld.apldata,*rd.aplint)); else return(eq(*ld.aplint,*rd.apldata)); default: return(0); /* no match */ } /* end switch */ }