/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */
/* execspeq APL2 V1.0.0 ************************************************
* Called by execspex to locate the token for the variable to be indexed*
* for selective specifiecation, e.g. the r in (Er)#... *
***********************************************************************/
#define INCLUDES APLCHDEF+APLDERIV+APLTOKEN+APLCB+TREE
#include "includes.h"
Apltoken execspeq(pp)
Avlnode *pp;
{
Treenode;
extern Treelist treehdr;
Apltoken nametok=NULL;
int i;
Aplcb cb;
Avlnode p=NULL;
Treelist treetest;
treetest = treehdr;
i = 1;
nametok = treehdr->avltokhd;
while (i && nametok != NULL) {
if (nametok->token_code == OPERAND_TOKEN) {
p = treenode(nametok->token_ptr.token_string);
if (NULL != p && NULL != (cb = p->avlleaf) &&
cb->aplflags & (APLMASK | APLAPL))
break; /* found it */
}
else if (nametok->token_code == RIGHT_PAREN) i++;
else if (nametok->token_code == LEFT_PAREN) {
i--;
if (i == 0) {
nametok = NULL;
break;
}
}
nametok = nametok->token_queue.token_next_ptr;
}
*pp = p;
return(nametok);
}