/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */
/* endoper APL2 V1.0.0 *************************************************
* Called to free memory for an aplcb. *
***********************************************************************/
#define INCLUDES APLMEM+APLCB+APLFUNCI
#include "includes.h"
void endoper(op)
Aplcb op;
{
Expunge; Temp;
Aplcb *dp;
void *v;
int i;
if (op == NULL)
return; /* nothing to free */
if (op->aplflags & APLFUNC) {
v = expunge((Aplfunc)op); /* expunge function definition */
return;
}
if (!(op->aplflags & APLTEMP))
return; /* nothing to free */
dp = op->aplptr.aplapl; /* point to first aplcb */
if (op->aplflags & APLAPL)
if (op->aplflags & APLINDX)
if (i = op->aplcount)
while (i--)
endoper(*dp++); /* free only if temporary */
else;
else {
i = op->aplcount ? op->aplcount : 1; /* free one */
while (i--)
endoper(temp(*dp++)); /* free regardless */
}
free(op);
}