/*Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved.*/
/* aplediu APL2 V1.0.0 *************************************************
* Called from apledit after it has determined the initial input for *
* the DEL editor is not a valid function header, unless it is a *
* niladic with no return, or it's an existing user-defined function to *
* be edited. *
***********************************************************************/
#define INCLUDES APLCB+APLED+APLFUNCI+APLTOKEN+TREE
#include "includes.h"
void aplediu(e,cp,stmtlen)
Apledst e; /* Edit common area. */
char *cp; /* Pointer to current input. */
int stmtlen; /* Length of current input. */
{
Apledcl; Aplediv; Aplediw; Aplediy; Aplediz; Execqfxe; Treenode;
extern int aplerr;
Aplcb wrk;
Aplfunc fun;
Apltoken curtok,tokhdr;
Avlnode p;
int tokcnt;
aplerr = 0; /* reset */
tokcnt = *(e->fp->functokc); /* token cnt from temp. hdr.*/
tokhdr = *(e->fp->functokp); /* token list from temp. hdr. */
curtok = execqfxe(tokhdr + --tokcnt,OPERAND_TOKEN,114);
if (aplerr) return; /* didn't get token type expected */
if (NULL == (p = treenode(curtok->token_ptr.token_string)) ||
NULL == (wrk = p->avlleaf)) {
aplediv(e); /* go edit new niladic w/o return */
return;
}
if (!(wrk->aplflags & APLFUNC)) {
aplerr = 115; /* name in use */
return;
}
fun = p->avlleaf; /* point to function description */
aplediw(e,fun); /* prepare function for editing */
if (tokcnt == 0)
apledcl(e); /* free name token */
else if (aplerr == 0)
aplediy(e,cp,stmtlen,NULL,tokcnt); /* process input */
if (aplerr == 0 && e->delptr == NULL)
aplediz(e); /* get more input */
}