/*Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved.*/ /* quadin APL2 V1.0.0 ************************************************** * Called by execexef. Accepts an expression from the standard input * * file, evaluates it and returns the result. Empty input, one with * * nothing other than tabs, newlines, and spaces, is ignored, and a new * * prompt is issued. System commands entered will be executed, then * * the prompt will be re-issued. * ***********************************************************************/ #define INCLUDES APLCB+APLCHDEF+STRING #include "includes.h" Aplcb quadin() { Aplscan; Aplwksp; Codechar; Compute; Endoper; Errinit; Errstop; Getchrv; extern int aplerr; Aplcb in,out; char *cp,*cpend,prompt[10]; int i; if (errinit()) return(NULL); strcat(strcpy(prompt,codechar(QUAD)),codechar(COLON)); for(out = NULL; out == NULL;) { aplerr = 0; /* reset prior error. */ in = getchrv(prompt); /* get input */ if (aplerr) return(NULL); if (in->aplcount == 0) endoper(in); /* ignore null input */ else { cp = in->aplptr.aplchar; cpend = cp + in->aplcount; i = aplscan(&cp,cpend); /* find first token code */ if (cp == cpend && i == RIGHT_ARROW) return(errstop(0,in,NULL,NULL)); if (i == RIGHT_PAREN) i = aplwksp(in,cp,cpend); /* in w/b freed */ else out = compute(in); } } return(errstop(0,NULL,NULL,out)); }