/* 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); }