/* Copyright (C) 1994 by Thomas Glen Smith. All Rights Reserved. */
/* aplquae APL2 V1.0.0 *************************************************
* Called from aplquad and execqncs to see if sp points to q-type name, *
* e.g. Lio. If not, 0 returned. Otherwise QUAD_code returned, and sp *
* w/b set to point beyond name. *
***********************************************************************/
#define INCLUDES APLCHDEF+APLTOKEN
#include "includes.h"
#define DC(name,cha,chb) static int name[]={cha,chb,999}
int aplquae(sp,spend)
char *sp[]; /* pointer to pointer to string being parsed */
char *spend; /* pointer to after end of string being parsed */
{
Aplscan; Aplwksq;
char *s,*t,*u; int code,first,i,j;
DC(ai,APL_A,APL_I); DC(av,APL_A,APL_V); DC(cr,APL_C,APL_R);
DC(ct,APL_C,APL_T); DC(dl,APL_D,APL_L); DC(ea,APL_E,APL_A);
DC(ex,APL_E,APL_X); DC(fc,APL_F,APL_C); DC(fx,APL_F,APL_X);
DC(ht,APL_H,APL_T); DC(io,APL_I,APL_O); DC(lc,APL_L,APL_C);
DC(lx,APL_L,APL_X); DC(nc,APL_N,APL_C); DC(nl,APL_N,APL_L);
DC(pp,APL_P,APL_P); DC(pw,APL_P,APL_W); DC(rl,APL_R,APL_L);
DC(tc,APL_T,APL_C); DC(ts,APL_T,APL_S); DC(tt,APL_T,APL_T);
DC(tz,APL_T,APL_Z); DC(ul,APL_U,APL_L); DC(wa,APL_W,APL_A);
t = 2 + (s = sp[0]); /* point after starting quad */
if (t > spend) return(0); /* can't be e.g. Lio or Lav */
i = 0;
if (aplwksq(ai,&s,t)) i = QUAD_AI;
else if (aplwksq(av,&s,t)) i = QUAD_AV;
else if (aplwksq(cr,&s,t)) i = QUAD_CR;
else if (aplwksq(ct,&s,t)) i = QUAD_CT;
else if (aplwksq(dl,&s,t)) i = QUAD_DL;
else if (aplwksq(ea,&s,t)) i = QUAD_EA;
else if (aplwksq(ex,&s,t)) i = QUAD_EX;
else if (aplwksq(fc,&s,t)) i = QUAD_FC;
else if (aplwksq(fx,&s,t)) i = QUAD_FX;
else if (aplwksq(ht,&s,t)) i = QUAD_HT;
else if (aplwksq(io,&s,t)) i = QUAD_IO;
else if (aplwksq(lc,&s,t)) i = QUAD_LC;
else if (aplwksq(lx,&s,t)) i = QUAD_LX;
else if (aplwksq(nc,&s,t)) i = QUAD_NC;
else if (aplwksq(nl,&s,t)) i = QUAD_NL;
else if (aplwksq(pp,&s,t)) i = QUAD_PP;
else if (aplwksq(pw,&s,t)) i = QUAD_PW;
else if (aplwksq(rl,&s,t)) i = QUAD_RL;
else if (aplwksq(tc,&s,t)) i = QUAD_TC;
else if (aplwksq(ts,&s,t)) i = QUAD_TS;
else if (aplwksq(tt,&s,t)) i = QUAD_TT;
else if (aplwksq(tz,&s,t)) i = QUAD_TZ;
else if (aplwksq(ul,&s,t)) i = QUAD_UL;
else if (aplwksq(wa,&s,t)) i = QUAD_WA;
else return(0); /* not a quad name */
u = s;
j = aplscan(&u,spend); /* delimiting token code */
if ((j >= ALPHAONE && j <= ALPHATWO) || (j >= APL_0 && j <= APL_9))
return(0); /* not properly delimited */
sp[0] = s; /* update text pointer */
return(i);
}