Metropoli BBS
VIEWER: match.c MODE: TEXT (ASCII)
/* 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)));
}
[ RETURN TO DIRECTORY ]