Metropoli BBS
VIEWER: execqcr.c MODE: TEXT (ASCII)
/* Copyright (C) 1994 by Thomas Glen Smith.  All Rights Reserved. */
/* execqcr APL2 V1.0.0 *************************************************
* Called by execmonq.                                                  *
* System function quad_cr, canonical representation.                   *
***********************************************************************/
#define INCLUDES APLCB+APLFUNCI+TREE
#include "includes.h"
Aplcb execqcr(rite)
Aplcb rite;
{
	Aplcopy; Chrcopy; Errinit; Errstop; Getcb; Nestchar; Temp; Treenode;
	extern int aplerr;
	Avlnode p;
     Aplcb cb,*cbp,out=NULL;
	int cbcount,datatype,maxlen,thislen;
	static char blank=' ';
	char *op;

	for (;;) { /* Lets me use break. */
		if (errinit()) break; /* Error. */
		if (APLCHAR != rite->aplflags & APLMASK || 1 < rite->aplrank ||
			0 == rite->aplcount) {
				aplerr = 109; /* Bad operand. */
				break;
		}
		if (NULL != (p = treenode(rite->aplptr.aplchar)) &&
			((Aplcb) p->avlleaf)->aplflags & APLFUNC) {
			cb = ((Aplfunc) p->avlleaf)->functext;
			datatype = cb->aplflags & (APLMASK | APLAPL);
			if (datatype == APLCHAR)
				out = temp(aplcopy(cb));
			else out = nestchar(cb);
		} else {
			out = getcb(NULL,0,APLCHAR+APLTEMP,2,NULL); /* 0-by-0 */
			if (out != NULL)
				*(out->apldim) = *(out->apldim+1) = 0;
		}
		break; /* Final break from for(;;). */
	} /* End for(;;) */
	return(errstop(0,NULL,rite,out));
}
[ RETURN TO DIRECTORY ]