Metropoli BBS
VIEWER: aplmatch.c MODE: TEXT (ASCII)
/* Copyright (C) 1993, 1998 by Thomas Glen Smith.  All Rights Reserved. */
/* aplmatch APL2 V1.0.1 ************************************************
* Called by aplmatck and memixe.                                       *
* Yields 1 if left and rite are identical in shape and value.          *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
int aplmatch(Aplcb left, Aplcb rite)
{
     Aplmatci; Eq;
     extern int aplerr;
     int lefttype,ritetype;
     Apluptr ld,rd;
     int i,*leftdim,*ritedim;

     if (left == NULL && rite == NULL) return(1);
     if (left == NULL || rite == NULL) return(0);
     if (left->aplrank != rite->aplrank) return(0);
     if (left->aplcount != rite->aplcount) return(0);
     if (left->aplrank) {
          leftdim = left->apldim;
          ritedim = rite->apldim;
          for (i = left->aplrank; i; i--)
               if (*leftdim++ != *ritedim++) return(0);
     }
     lefttype = left->aplflags & (APLMASK + APLAPL);
     ritetype = rite->aplflags & (APLMASK + APLAPL);
     if (lefttype != ritetype &&
         !((lefttype | ritetype) & APL_NUMERIC)) return(0);
     ld.aplchar = left->aplptr.aplchar;
     rd.aplchar = rite->aplptr.aplchar;
     for (i = left->aplcount; i; i--) {
          if (!aplmatci(ld,rd,lefttype,ritetype)) return(0);
          ld.aplchar += left->aplsize;
          rd.aplchar += rite->aplsize;
     }
     return(1);
}
[ RETURN TO DIRECTORY ]