diff --git a/psys/include/p2c/numex.h b/psys/include/p2c/numex.h
deleted file mode 100644
index 8c5afb0a687ecefccb9db39ee7a604d008577172..0000000000000000000000000000000000000000
--- a/psys/include/p2c/numex.h
+++ /dev/null
@@ -1,220 +0,0 @@
-#ifndef NUMEX_H
-#define NUMEX_H
-
-
-#include <p2c/strlist.h>
-#include <p2c/newasm.h>
-
-#ifdef NUMEX_G
-# define vextern
-#else
-# define vextern extern
-#endif
-
-
-#define ne_maxargs      255
-
-#define ne_badvalue     1.2345678e277   /*not likely to occur in nature*/
-
-#define ne_badescape    (-50)
-
-
-
-typedef enum {
-  ne_notype, ne_integer, ne_real, ne_string, ne_boolean
-} ne_datatype;
-typedef ne_datatype ne_datatypearray[ne_maxargs];
-
-typedef enum {
-  ne_error, ne_ic, ne_rc, ne_sc, ne_ip, ne_rp, ne_sp, ne_if, ne_rf, ne_sf,
-  ne_iarg, ne_rarg, ne_sarg, ne_iadd, ne_isub, ne_imul, ne_idiv, ne_ineg,
-  ne_radd, ne_rsub, ne_rmul, ne_rdiv, ne_rneg, ne_rpow, ne_sadd, ne_itor,
-  ne_imod, ne_rbool, ne_sbool, ne_ieq, ne_ine, ne_ilt, ne_ile, ne_igt, ne_ige,
-  ne_req, ne_rne, ne_rlt, ne_rle, ne_rgt, ne_rge, ne_seq, ne_sne, ne_slt,
-  ne_sle, ne_sgt, ne_sge, ne_not, ne_and, ne_or, ne_xor, ne_lsh, ne_rsh,
-  ne_lnot, ne_ior, ne_ror, ne_sor, ne_iand, ne_rand, ne_sand, ne_icond,
-  ne_rcond, ne_scond, ne_round, ne_trunc, ne_ln, ne_exp, ne_iabs, ne_rabs,
-  ne_sqrt, ne_sin, ne_cos, ne_tan, ne_arctan, ne_rxp, ne_rxor
-} ne_opkind;
-
-
-typedef enum {
-  ne_noerror, ne_syntax, ne_overflow, ne_underflow, ne_divzero, ne_strlong,
-  ne_badtypes, ne_undef, ne_badval
-} ne_errorkind;
-
-
-
-
-typedef struct ne_functionrec {
-  uchar nargs, minargs, maxargs;
-  unsigned static_ : 1, subnex : 1, dummy_2 : 6;
-  union {
-    na_quadword qw;
-    struct ne_nexrec **nexp;
-    struct {
-      _PROCEDURE ipr;
-      unsigned arg1 : 3, arg2 : 3, arg3 : 3, arg4 : 3;
-    } U5;
-    _PROCEDURE rpr;
-    _PROCEDURE spr;
-    struct {
-      na_quadword qw2;
-      ne_datatype ptypes[ne_maxargs];
-    } U99;
-  } UU;
-} ne_functionrec;
-
-typedef struct ne_nexrec *ne_nexptrarray[ne_maxargs];
-
-typedef na_quadword ne_argvalarray[ne_maxargs];
-
-typedef struct ne_nexrec {
-  uchar nargs;
-  unsigned op : 7;
-  union {
-    na_quadword qw;
-    unsigned err : 4;
-    long i;
-    double r;
-    char *s;
-    struct {
-      long *ip;
-      strlist_t *ips;
-      struct ne_nexrec *p1, *p2, *p3, *p4;
-    } U10;
-    struct {
-      double *rp;
-      strlist_t *rps;
-    } U11;
-    struct {
-      char **sp;
-      strlist_t *sps;
-    } U12;
-    struct {
-      ne_functionrec *fp;
-      strlist_t *fps;
-    } U15;
-    struct {
-      struct ne_nexrec **ep;
-      strlist_t *eps;
-    } U16;
-    struct {
-      na_quadword qw2;
-      ne_nexptrarray pvals;
-    } U99;
-  } UU;
-} ne_nexrec;
-
-
-typedef struct ne_desc {
-  strlist_t *symtab;
-  unsigned casesens : 1, builtin : 1, scaled : 1, doubleeq : 1, isfunc : 1,
-	   dummy0 : 7, error : 4;
-  char units[6];
-  long startident[9], ident[9];   /*must not contain #0*/
-  _PROCEDURE symproc;
-  na_long dummy1, dummy2;
-} ne_desc;
-
-
-#define ne_kind_intconst  'A'   /*for symbol table entries*/
-#define ne_kind_intvalue  'B'
-#define ne_kind_intptr  'C'
-#define ne_kind_intfunc  'D'
-#define ne_kind_realconst  'E'
-#define ne_kind_srealconst  'F'
-#define ne_kind_realptr  'G'
-#define ne_kind_realfunc  'H'
-#define ne_kind_strconst  'I'
-#define ne_kind_strvalue  'J'
-#define ne_kind_strptr  'K'
-#define ne_kind_strfunc  'L'
-#define ne_kind_intarg  'M'
-#define ne_kind_realarg  'N'
-#define ne_kind_strarg  'O'
-#define ne_kind_realxptr  'P'
-#define ne_kind_nex     'Z'
-
-
-vextern na_quadword *ne_argarray;
-
-
-extern void ne_init (ne_desc *desc);
-extern void ne_compile (char *ex, ne_nexrec **nex, ne_desc *desc);
-extern void ne_intcompile (char *ex, long *endp, ne_nexrec **nex,
-			      ne_desc *desc);
-extern void ne_dump (ne_nexrec *nex);
-extern void ne_uncompile (ne_nexrec *nex, char *ex, ne_desc *desc);
-extern void ne_copy (ne_nexrec *nex, ne_nexrec **newnex);
-extern void ne_dispose (ne_nexrec **nex);
-extern void ne_constant (ne_nexrec **nex, ne_desc *desc, char *which);
-extern void ne_notconstant (ne_nexrec **nex, ne_desc *desc, char *which);
-extern void ne_constantlist (ne_nexrec **nex, ne_desc *desc,
-				strlist_t *which);
-extern void ne_notconstantlist (ne_nexrec **nex, ne_desc *desc,
-				   strlist_t *which);
-extern ne_nexrec *ne_makeerror (ne_errorkind err);
-extern ne_datatype ne_exprtype (ne_nexrec *nex);
-extern ne_nexrec *ne_typecast (ne_nexrec *nex, ne_datatype typ);
-extern void ne_evaluate (ne_nexrec *nex, ne_nexrec *res);
-extern long ne_ievaluate (ne_nexrec *nex, ne_desc *desc);
-extern double ne_revaluate (ne_nexrec *nex, ne_desc *desc);
-extern char *ne_sevaluate (char *Result, ne_nexrec *nex, ne_desc *desc);
-extern long ne_ievalexpr (char *ex, ne_desc *desc);
-extern double ne_revalexpr (char *ex, ne_desc *desc);
-
-extern char *ne_sevalexpr (char *Result, char *ex, ne_desc *desc);
-extern void ne_makeintconst (strlist_t *sym, long i);
-extern void ne_makesrealconst (strlist_t *sym, double r);
-extern void ne_makerealconst (strlist_t *sym, double r);
-extern void ne_makestrconst (strlist_t *sym, char *s);
-extern void ne_makeintvar (strlist_t *sym, long *i);
-extern void ne_makerealvar (strlist_t *sym, double *r);
-extern void ne_makerealxvar (strlist_t *sym, double *r);
-extern void ne_makestrvar (strlist_t *sym, char *s);
-extern void ne_makestrptrvar (strlist_t *sym, char **sp);
-extern void ne_makeintfunc (strlist_t *sym, ne_datatype t1,
-			       ne_datatype t2, ne_datatype t3,
-			       _PROCEDURE pr);
-extern void ne_makerealfunc (strlist_t *sym, ne_datatype t1,
-				ne_datatype t2, ne_datatype t3,
-				_PROCEDURE pr);
-extern void ne_makestrfunc (strlist_t *sym, ne_datatype t1,
-			       ne_datatype t2, ne_datatype t3,
-			       _PROCEDURE pr);
-extern void ne_makeintmfunc (strlist_t *sym, long nargs,
-				ne_datatype *args, _PROCEDURE pr);
-extern void ne_makerealmfunc (strlist_t *sym, long nargs,
-				 ne_datatype *args, _PROCEDURE pr);
-extern void ne_makestrmfunc (strlist_t *sym, long nargs,
-				ne_datatype *args, _PROCEDURE pr);
-extern void ne_makeintsfunc (strlist_t *sym, long nargs,
-				ne_datatype *args, ne_nexrec **nex);
-extern void ne_makerealsfunc (strlist_t *sym, long nargs,
-				 ne_datatype *args, ne_nexrec **nex);
-extern void ne_makestrsfunc (strlist_t *sym, long nargs,
-				ne_datatype *args, ne_nexrec **nex);
-extern void ne_makeintarg (strlist_t *sym, long i);
-extern void ne_makerealarg (strlist_t *sym, long i);
-extern void ne_makestrarg (strlist_t *sym, long i);
-extern void ne_setminargs (strlist_t *sym, long minargs);
-extern void ne_setmaxargs (strlist_t *sym, long maxargs);
-extern void ne_makestaticfunc (strlist_t *sym);
-extern void ne_disposesym (strlist_t *sym);
-
-extern void ne_disposesymtab (strlist_t **symtab);
-extern int ne_condeval (ne_nexrec *nex);
-extern long ne_ieval (ne_nexrec *nex);
-extern double ne_reval (ne_nexrec *nex);
-
-extern char *ne_seval (char *Result, ne_nexrec *nex);
-
-extern int ne_readreal (char *s, double *r, ne_desc *desc);
-
-
-#undef vextern
-
-#endif /*NUMEX_H*/
-
-/* End. */
diff --git a/psys/src/Makefile b/psys/src/Makefile
index df447ed2bd419e23648b2e1f406e3652276a21ed..94a60d7ce778454a82d6486fd9769c48c53badfd 100644
--- a/psys/src/Makefile
+++ b/psys/src/Makefile
@@ -104,7 +104,6 @@ OBJS = sysdevs.o \
        math.o \
        rnd.o \
        regex.o \
-       numex.o \
        p2clib.o \
        loc.p2clib.o
 
@@ -238,7 +237,6 @@ psysinc:
 	cp ../include/p2c/newasm.h psys/include/p2c
 	cp ../include/p2c/newcrt.h psys/include/p2c
 	cp ../include/p2c/regex.h psys/include/p2c
-	cp ../include/p2c/numex.h psys/include/p2c
 	cp ../include/p2c/plot.h psys/include/p2c
 	cp ../include/p2c/plot_routines.h psys/include/p2c
 	cp ../include/p2c/rnd.h psys/include/p2c
@@ -260,7 +258,6 @@ psyssrc:
 	cp newci.c psys/src
 	cp newcrt.c psys/src
 	cp newkbd.c psys/src
-	cp numex.c psys/src
 	cp p2clib.c psys/src
 	cp plot.c psys/src
 	cp plot.font psys/src
diff --git a/psys/src/numex.c b/psys/src/numex.c
deleted file mode 100644
index 5825bced96cd1da8b97db9f27f1552fd6413d684..0000000000000000000000000000000000000000
--- a/psys/src/numex.c
+++ /dev/null
@@ -1,3412 +0,0 @@
-#include <p2c/p2c.h>
-#include <string.h>
-
-#define NUMEX_G
-#include <p2c/numex.h>
-#include <p2c/math.h>
-#include <p2c/strings.h>
-
-
-typedef ne_datatype typetab[76];
-
-
-static const typetab types =
-{
-	ne_notype, ne_integer, ne_real, ne_string, ne_integer, ne_real, ne_string,
-	ne_integer, ne_real, ne_string, ne_integer, ne_real, ne_string, ne_integer,
-	ne_integer, ne_integer, ne_integer, ne_integer, ne_real, ne_real, ne_real,
-	ne_real, ne_real, ne_real, ne_string, ne_real, ne_integer, ne_integer,
-	ne_integer, ne_integer, ne_integer, ne_integer, ne_integer, ne_integer,
-	ne_integer, ne_integer, ne_integer, ne_integer, ne_integer, ne_integer,
-	ne_integer, ne_integer, ne_integer, ne_integer, ne_integer, ne_integer,
-	ne_integer, ne_integer, ne_integer, ne_integer, ne_integer, ne_integer,
-	ne_integer, ne_integer, ne_integer, ne_real, ne_string, ne_integer, ne_real,
-	ne_string, ne_integer, ne_real, ne_string, ne_integer, ne_integer, ne_real,
-	ne_real, ne_integer, ne_real, ne_real, ne_real, ne_real, ne_real, ne_real,
-	ne_real, ne_real
-};
-
-
-#define numbuiltins     11
-
-
-typedef struct builtinrec
-{
-	char name[9];
-	char kind;
-	ne_opkind op;
-} builtinrec;
-
-typedef builtinrec builtintab[numbuiltins];
-
-static builtintab builtins;
-
-
-#define numopersyms     22
-
-
-typedef struct opersymrec
-{
-  char name;
-  uchar lprec, rprec;
-  unsigned iop : 7, rop : 7, sop : 7;
-} opersymrec;
-
-typedef opersymrec opersymtab[numopersyms];
-
-
-static const opersymtab opers =
-{
-	{ '?', 30, 29, ne_icond, ne_rcond, ne_scond },
-	{ '\b', 40, 40, ne_error, ne_rxor, ne_error },
-	{ '\005', 40, 40, ne_ior, ne_ror, ne_sor },
-	{ '\004', 50, 50, ne_iand, ne_rand, ne_sand },
-	{ '|', 60, 60, ne_or, ne_error, ne_error },
-	{ '@', 70, 70, ne_xor, ne_error, ne_error },
-	{ '&', 80, 80, ne_and, ne_error, ne_error },
-	{ '=', 90, 90, ne_ieq, ne_req, ne_seq },
-	{ '\001', 90, 90, ne_ine, ne_rne, ne_sne },
-	{ '<', 100, 100, ne_ilt, ne_rlt, ne_slt },
-	{ '>', 100, 100, ne_igt, ne_rgt, ne_sgt },
-	{ '\002', 100, 100, ne_ile, ne_rle, ne_sle },
-	{ '\003', 100, 100, ne_ige, ne_rge, ne_sge },
-	{ '\006', 110, 110, ne_lsh, ne_error, ne_error },
-	{ '\007', 110, 110, ne_rsh, ne_error, ne_error },
-	{ '+', 120, 120, ne_iadd, ne_radd, ne_sadd },
-	{ '-', 120, 120, ne_isub, ne_rsub, ne_error },
-	{ '*', 130, 130, ne_imul, ne_rmul, ne_error },
-	{ '/', 130, 130, ne_error, ne_rdiv, ne_error },
-	{ '\\', 130, 130, ne_idiv, ne_error, ne_error },
-	{ '%', 130, 130, ne_imod, ne_error, ne_error },
-	{ '^', 135, 134, ne_error, ne_rpow, ne_error }
-};
-
-#define neg_prec        140
-#define not_prec        140
-#define lnot_prec       140
-
-
-static int readreal(char *s, long *i, double *r, ne_desc *desc)
-{
-	int Result;
-	long j;
-	char ch;
-	char buf[256];
-	char *STR1;
-	char STR2[256];
-
-	while (s[*i - 1] == ' ')
-		(*i)++;
-	j = *i;
-
-	if (s[*i - 1] == '-' || s[*i - 1] == '+')
-		(*i)++;
-
-	while (isdigit(s[*i - 1]))
-		(*i)++;
-
-	if (s[*i - 1] == '.' && isdigit(s[*i]))
-	{
-		do {
-			(*i)++;
-		} while (isdigit(s[*i - 1]));
-	}
-
-	if ((s[*i - 1] == 'E' || s[*i - 1] == 'e') && ((isdigit(s[*i]) || (s[*i] == '-' || s[*i] == '+')) && isdigit(s[*i + 1])))
-	{
-		(*i)++;
-		if (s[*i - 1] == '-' || s[*i - 1] == '+')
-			(*i)++;
-		while (isdigit(s[*i - 1]))
-			(*i)++;
-	}
-
-	if (*i <= j)
-		return false;
-
-	buf[*i - j] = '\0';
-	memmove((void*)buf, (void*)(&s[j - 1]), *i - j);
-	*r = strtod(buf, &STR1);
-	j = STR1 - buf + 1;
-	Result = true;
-	if (!P_inset(s[*i - 1], desc->startident))
-		return Result;
-	*buf = '\0';
-	while (P_inset(s[*i - 1], desc->ident) || P_inset(s[*i - 1], desc->startident))
-	{
-		sprintf(buf + strlen(buf), "%c", s[*i - 1]);
-		(*i)++;
-	}
-
-	strupper(buf, buf);
-	if (strends(buf, strupper(STR2, desc->units)))
-	{
-		buf[strlen(buf) - strlen(desc->units)] = '\0';
-	}
-
-	if (*buf == '\0')
-		return Result;
-	ch = buf[0];
-
-	switch (ch) {
-		case 'F':
-			*r *= 1e-15;
-			return Result;
-
-		case 'P':
-		*r *= 1e-12;
-		return Result;
-
-		case 'N':
-			*r *= 1e-9;
-			return Result;
-
-		case 'U':
-			*r *= 1e-6;
-			return Result;
-
-		case 'K':
-			*r *= 1e3;
-			return Result;
-
-		case 'G':
-			*r *= 1e9;
-			return Result;
-
-		case 'T':
-    	*r *= 1e12;
-    	return Result;
-
-		case 'M':
-    		return Result;
-	}
-
-	if (buf[1] == 'E' && buf[2] == 'G')
-		*r *= 1e6;
-	else
-		*r *= 1e-3;
-
-	return Result;
-}
-
-int ne_readreal(char *s_, double *r, ne_desc *desc)
-{
-	char s[256];
-	long i;
-	char STR1[256];
-
-	strcpy(s, s_);
-	strcpy(STR1, s);
-	strcpy(s, STR1);
-	i = 1;
-	return (readreal(s, &i, r, desc));
-}
-
-static char *realunit(char *Result, double r, char *u)
-{
-	char s[256];
-	char STR2[256];
-
-	if (r == 0 || fabs(r) >= 1e15 || fabs(r) < 1e-16)
-	{
-		*s = '\0';
-	}
-	else if (fabs(r) >= 1e12)
-	{
-		strcpy(s, "T");
-		r /= 1e12;
-	}
-	else if (fabs(r) >= 1e9)
-	{
-		strcpy(s, "G");
-		r /= 1e9;
-	}
-	else if (fabs(r) >= 1e6)
-	{
-		strcpy(s, "Meg");
-		r /= 1e6;
-	}
-	else if (fabs(r) >= 1e3)
-	{
-		strcpy(s, "K");
-		r /= 1e3;
-	}
-	else if (fabs(r) >= 0.1)
-	{
-		*s = '\0';
-	}
-	else if (fabs(r) >= 1e-3)
-	{
-		strcpy(s, "m");
-		r *= 1e3;
-	}
-	else if (fabs(r) >= 1e-6)
-	{
-		strcpy(s, "u");
-		r *= 1e6;
-	}
-	else if (fabs(r) >= 1e-9)
-	{
-		strcpy(s, "n");
-		r *= 1e9;
-	}
-	else if (fabs(r) >= 1e-12)
-	{
-		strcpy(s, "p");
-		r *= 1e12;
-	}
-	else
-	{
-		strcpy(s, "f");
-		r *= 1e15;
-	}
-
-	sprintf(s, "%g%s", r, strcpy(STR2, s));
-	sprintf(Result, "%s%s", s, u);
-	return Result;
-}
-
-
-static void dummysymproc(char *name, ne_desc *desc, strlist_t **symptr)
-{
-	*symptr = strlist_find(desc->symtab, name);
-}
-
-void ne_init(ne_desc *desc)
-{
-	strcpy(builtins[0].name,"ROUND");
-	builtins[0].kind = 'A';
-	builtins[0].op = ne_error;
-	strcpy(builtins[1].name,"TRUNC");
-	builtins[1].kind = 'A';
-	builtins[1].op = ne_error;
-	strcpy(builtins[2].name,"LN");
-	builtins[2].kind = 'B';
-	builtins[2].op = ne_error;
-	strcpy(builtins[3].name,"EXP");
-	builtins[3].kind = 'B';
-	builtins[3].op = ne_error;
-	strcpy(builtins[4].name,"ABS");
-	builtins[4].kind = 'C';
-	builtins[4].op = ne_error;
-	strcpy(builtins[5].name,"SQRT");
-	builtins[5].kind = 'B';
-	builtins[5].op = ne_error;
-	strcpy(builtins[6].name,"SIN");
-	builtins[6].kind = 'B';
-	builtins[6].op = ne_error;
-	strcpy(builtins[7].name,"COS");
-	builtins[7].kind = 'B';
-	builtins[7].op = ne_error;
-	strcpy(builtins[8].name,"TAN");
-	builtins[8].kind = 'B';
-	builtins[8].op = ne_error;
-	strcpy(builtins[9].name,"ARCTAN");
-	builtins[9].kind = 'B';
-	builtins[9].op = ne_error;
-	strcpy(builtins[10].name,"PI");
-	builtins[10].kind = 'P';
-	builtins[10].op = ne_error;
-	desc->symtab = NULL;
-	desc->casesens = false;
-	desc->builtin = true;
-	*desc->units = '\0';
-	desc->scaled = false;
-	desc->doubleeq = false;
-	desc->error = (unsigned)ne_noerror;
-	P_addsetr(P_expset(desc->startident, 0L), 'A', 'Z');
-	P_addsetr(desc->startident, 'a', 'z');
-	P_addset(desc->startident, '_');
-	P_addsetr(P_expset(desc->ident, 0L), 'A', 'Z');
-	P_addsetr(desc->ident, 'a', 'z');
-	P_addsetr(desc->ident, '0', '9');
-	P_addset(desc->ident, '_');
-	desc->symproc.proc = (void*)dummysymproc;
-	desc->symproc.link = (void*)NULL;
-	desc->isfunc = false;
-}
-
-static void newnexrec(ne_nexrec **nex, long nargs, ne_opkind op)
-{
-	*nex = (ne_nexrec *)Malloc(sizeof(ne_nexrec) + nargs * 4);
-	(*nex)->nargs = nargs;
-	(*nex)->op = (unsigned)op;
-}
-
-static void disposenexrec(ne_nexrec **nex)
-{
-	Free(*nex);
-}
-
-void ne_copy(ne_nexrec *nex, ne_nexrec **newnex)
-{
-	ne_opkind op;
-	long i, FORLIM;
-
-	if (nex == NULL)
-	{
-		*newnex = NULL;
-		return;
-	}
-	op = (ne_opkind)nex->op;
-	newnexrec(newnex, (long)nex->nargs, op);
-	(*newnex)->UU.qw = nex->UU.qw;
-	FORLIM = nex->nargs;
-	for (i = 0; i < FORLIM; i++)
-		ne_copy(nex->UU.U99.pvals[i], &(*newnex)->UU.U99.pvals[i]);
-	if (op == ne_sc)
-		nex->UU.s = (char *) strdup((*newnex)->UU.s);
-}
-
-void ne_dispose(ne_nexrec **nex)
-{
-	long i, FORLIM;
-
-	if (*nex == NULL)
-		return;
-	if ((ne_opkind)(*nex)->op == ne_sc)
-		strdispose(&(*nex)->UU.s);
-	FORLIM = (*nex)->nargs;
-	for (i = 0; i < FORLIM; i++)
-		ne_dispose(&(*nex)->UU.U99.pvals[i]);
-	disposenexrec(nex);
-}
-
-static char *ne_errorkind_NAMES[] = {
-  "NE_NOERROR", "NE_SYNTAX", "NE_OVERFLOW", "NE_UNDERFLOW", "NE_DIVZERO",
-  "NE_STRLONG", "NE_BADTYPES", "NE_UNDEF", "NE_BADVAL"
-} ;
-
-static char *ne_opkind_NAMES[] = {
-  "NE_ERROR", "NE_IC", "NE_RC", "NE_SC", "NE_IP", "NE_RP", "NE_SP", "NE_IF",
-  "NE_RF", "NE_SF", "NE_IARG", "NE_RARG", "NE_SARG", "NE_IADD", "NE_ISUB",
-  "NE_IMUL", "NE_IDIV", "NE_INEG", "NE_RADD", "NE_RSUB", "NE_RMUL", "NE_RDIV",
-  "NE_RNEG", "NE_RPOW", "NE_SADD", "NE_ITOR", "NE_IMOD", "NE_RBOOL",
-  "NE_SBOOL", "NE_IEQ", "NE_INE", "NE_ILT", "NE_ILE", "NE_IGT", "NE_IGE",
-  "NE_REQ", "NE_RNE", "NE_RLT", "NE_RLE", "NE_RGT", "NE_RGE", "NE_SEQ",
-  "NE_SNE", "NE_SLT", "NE_SLE", "NE_SGT", "NE_SGE", "NE_NOT", "NE_AND",
-  "NE_OR", "NE_XOR", "NE_LSH", "NE_RSH", "NE_LNOT", "NE_IOR", "NE_ROR",
-  "NE_SOR", "NE_IAND", "NE_RAND", "NE_SAND", "NE_ICOND", "NE_RCOND",
-  "NE_SCOND", "NE_ROUND", "NE_TRUNC", "NE_LN", "NE_EXP", "NE_IABS", "NE_RABS",
-  "NE_SQRT", "NE_SIN", "NE_COS", "NE_TAN", "NE_ARCTAN", "NE_RXP", "NE_RXOR"
-} ;
-
-void ne_dump(ne_nexrec *nex)
-{
-	char buf[256];
-	long i;
-	ne_opkind op;
-	char STR1[256];
-	long FORLIM;
-
-	if (nex == NULL)
-	{
-		printf("(nil)");
-		return;
-	}
-	op = (ne_opkind)nex->op;
-	switch (op)
-	{
-
-		case ne_ic:
-			printf("%ld", nex->UU.i);
-			break;
-
-		case ne_rc:
-			sprintf(buf, "%g", nex->UU.r);
-			if (strpos2(buf, ".", 1) == 0 && strpos2(buf, "E", 1) == 0)
-				strcat(buf, ".");
-			fputs(buf, stdout);
-			break;
-
-		case ne_sc:
-			printf("'%s'", nex->UU.s);
-			break;
-
-		case ne_ip:
-			if (nex->UU.U10.ips != NULL)
-				fputs(nex->UU.U10.ips->s, stdout);
-			else
-				printf("(i)");
-			break;
-
-		case ne_rp:
-		case ne_rxp:
-			if (nex->UU.U11.rps != NULL)
-    			fputs(nex->UU.U11.rps->s, stdout);
-			else
-				printf("(r)");
-			break;
-
-		case ne_sp:
-			if (nex->UU.U12.sps != NULL)
-				fputs(nex->UU.U12.sps->s, stdout);
-			else
-				printf("(s)");
-			break;
-
-		case ne_if:
-		case ne_rf:
-		case ne_sf:
-			if (nex->UU.U15.fps != NULL)
-				fputs(nex->UU.U15.fps->s, stdout);
-			else
-				printf("func");
-			break;
-
-		case ne_error:
-			printf("error(%s)", ne_errorkind_NAMES[nex->UU.err]);
-			break;
-
-		default:
-			strcpy(buf, ne_opkind_NAMES[(long)op]);
-			i = strlen(buf) + 1;
-			buf[i - 1] = '\0';
-			strcpy_overlap(buf, buf + 3);
-			fputs(strlower(STR1, buf), stdout);
-			break;
-	}
-	if (nex->nargs <= 0)
-		return;
-	FORLIM = nex->nargs;
-	for (i = 1; i <= FORLIM; i++)
-	{
-		if (i == 1)
-			putchar('[');
-		else
-			putchar(',');
-		ne_dump(nex->UU.U99.pvals[i - 1]);
-	}
-	putchar(']');
-}
-
-static int integerp(ne_nexrec *nex)
-{
-	return (nex != NULL && types[nex->op] == ne_integer);
-}
-
-static int realp(ne_nexrec *nex)
-{
-	return (nex != NULL && types[nex->op] == ne_real);
-}
-
-static int stringp(ne_nexrec *nex)
-{
-	return (nex != NULL && types[nex->op] == ne_string);
-}
-
-ne_nexrec *ne_makeerror(ne_errorkind err)
-{
-	ne_nexrec *nex;
-
-	newnexrec(&nex, 0L, ne_error);
-	nex->UU.err = (unsigned)err;
-	return nex;
-}
-
-static void optimize (ne_nexrec **nex, ne_desc *desc, strlist_t *which, long mode);
-
-/* Local variables for optimize: */
-struct LOC_optimize
-{
-	ne_desc *desc;
-	strlist_t *which;
-	long mode;
-	ne_errorkind err;
-	long ires;
-	double rres;
-	char sres[256];
-} ;
-
-/* Local variables for opt: */
-struct LOC_opt
-{
-	struct LOC_optimize *LINK;
-	ne_nexrec **nex;
-} ;
-
-static int makeconstant(char *name, struct LOC_opt *LINK)
-{
-	if (LINK->LINK->mode == 1 || LINK->LINK->mode == 2)
-		return ((strlist_find(LINK->LINK->which, name) != NULL) == (LINK->LINK->mode == 1));
-	else
-		return false;
-}
-
-static void error(ne_errorkind errk, struct LOC_opt *LINK)
-{
-	LINK->LINK->err = errk;
-	_Escape(2345);
-}
-
-static void collapsehalf(ne_nexrec *px, ne_nexrec *py, struct LOC_opt *LINK)
-{
-	/*keep px, dispose py*/
-	disposenexrec(LINK->nex);
-	ne_dispose(&py);
-	*LINK->nex = px;
-}
-
-static void collapsecond(ne_nexrec *px, ne_nexrec *py, ne_nexrec *pz, struct LOC_opt *LINK)
-{
-	/*keep py, dispose px/pz*/
-	disposenexrec(LINK->nex);
-	ne_dispose(&px);
-	ne_dispose(&pz);
-	*LINK->nex = py;
-}
-
-static void collapseint(long res, struct LOC_opt *LINK)
-{
-	ne_dispose(LINK->nex);
-	newnexrec(LINK->nex, 0L, ne_ic);
-	(*LINK->nex)->UU.i = res;
-}
-
-static void collapsereal(double res, struct LOC_opt *LINK)
-{
-	ne_dispose(LINK->nex);
-	newnexrec(LINK->nex, 0L, ne_rc);
-	(*LINK->nex)->UU.r = res;
-}
-
-static void collapsestr(char *res, struct LOC_opt *LINK)
-{
-	ne_dispose(LINK->nex);
-	newnexrec(LINK->nex, 0L, ne_sc);
-	(*LINK->nex)->UU.s = (char *)strdup(res);
-}
-
-static int istrue(ne_nexrec *nex, struct LOC_opt *LINK)
-{
-	int Result;
-
-	switch ((ne_opkind)nex->op)
-	{
-		case ne_ic:
-			Result = (nex->UU.i != 0);
-			break;
-
-		case ne_rc:
-			Result = (nex->UU.r != 0);
-			break;
-
-		case ne_sc:
-			Result = (*nex->UU.s != '\0');
-			break;
-
-		default:
-			Result = false;
-			break;
-	}
-	return Result;
-}
-
-static int isfalse(ne_nexrec *nex, struct LOC_opt *LINK)
-{
-	int Result;
-
-	switch ((ne_opkind)nex->op)
-	{
-
-		case ne_error:
-			Result = ((ne_errorkind)nex->UU.err == ne_badval);
-			break;
-
-		case ne_ic:
-			Result = (nex->UU.i == 0);
-			break;
-
-		case ne_rc:
-			Result = (nex->UU.r == 0);
-			break;
-
-		case ne_sc:
-			Result = (*nex->UU.s == '\0');
-			break;
-
-		default:
-			Result = false;
-			break;
-	}
-	return Result;
-}
-
-static int foldfunction(struct LOC_opt *LINK)
-{
-	int Result;
-	long i1;
-	ne_nexrec *WITH;
-	long FORLIM;
-
-	WITH = *LINK->nex;
-	if (!WITH->UU.U15.fp->static_ || WITH->UU.U15.fp->subnex)
-		return false;
-	Result = true;
-	FORLIM = WITH->nargs;
-
-	for (i1 = 0; i1 < FORLIM; i1++)
-	{
-		if (WITH->UU.U99.pvals[i1]->op >= 32 ||
-		((1L << WITH->UU.U99.pvals[i1]->op) & ((1L << ((long)ne_ic)) | (1L << ((long)ne_rc)) | (1L << ((long)ne_sc)))) == 0)
-			Result = false;
-	}
-	return Result;
-}
-
-static ne_nexrec *opt(ne_nexrec **nex_, struct LOC_optimize *LINK)
-{
-	struct LOC_opt V;
-	long i1;
-	ne_nexrec *WITH;
-	long FORLIM;
-	char STR1[256];
-
-	V.LINK = LINK;
-	V.nex = nex_;
-	if (*V.nex == NULL)
-		return (*V.nex);
-	WITH = *V.nex;
-	if ((ne_opkind)WITH->op != (int)ne_scond &&
-		(ne_opkind)WITH->op != (int)ne_sor &&
-		(ne_opkind)WITH->op != (int)ne_sand &&
-		(ne_opkind)WITH->op != (int)ne_rcond &&
-		(ne_opkind)WITH->op != (int)ne_ror &&
-		(ne_opkind)WITH->op != (int)ne_rand &&
-		(ne_opkind)WITH->op != (int)ne_icond &&
-		(ne_opkind)WITH->op != (int)ne_ior &&
-		(ne_opkind)WITH->op != (int)ne_iand &&
-		(ne_opkind)WITH->op != (int)ne_rxor &&
-		(ne_opkind)WITH->op != (int)ne_lnot)
-	{
-		FORLIM = WITH->nargs;
-		for (i1 = 0; i1 < FORLIM; i1++)
-		WITH->UU.U99.pvals[i1] = opt(&WITH->UU.U99.pvals[i1], LINK);
-	}
-
-	/* optimize(pvals[i1], desc, which, mode); */
-	switch ((ne_opkind)WITH->op)
-	{
-
-	case ne_error:
-		error((ne_errorkind)WITH->UU.err, &V);
-		break;
-
-	case ne_ip:
-		if (WITH->UU.U10.ips != NULL && makeconstant(WITH->UU.U10.ips->s, &V))
-		{
-			WITH->op = (unsigned)ne_ic;
-			WITH->UU.i = *WITH->UU.U10.ip;
-		}
-		break;
-
-	case ne_rp:
-	case ne_rxp:
-		if (WITH->UU.U11.rps != NULL && makeconstant(WITH->UU.U11.rps->s, &V))
-		{
-			WITH->op = (unsigned)ne_rc;
-			WITH->UU.r = *WITH->UU.U11.rp;
-			if ((ne_opkind)WITH->op == ne_rxp && WITH->UU.r == ne_badvalue)
-				error(ne_badval, &V);
-		}
-		break;
-
-	case ne_sp:
-		if (WITH->UU.U12.sps != NULL && makeconstant(WITH->UU.U12.sps->s, &V))
-		{
-			WITH->op = (unsigned)ne_sc;
-			WITH->UU.s = (char *)strdup(*WITH->UU.U12.sp);
-		}
-		break;
-
-	case ne_if:
-		if (foldfunction(&V))
-		{
-			if (WITH->UU.U15.fp->UU.U5.ipr.link != NULL)
-				(*(void(*) (ne_nexrec *nex, long *res, void* _link)) WITH->UU.U15.fp->UU.U5.ipr.proc)(*V.nex, &LINK->ires,
-					WITH->UU.U15.fp->UU.U5.ipr.link);
-			else
-				(*(void(*) (ne_nexrec *nex, long *res)) WITH->UU.U15.fp->UU.U5.ipr.proc)(*V.nex, &LINK->ires);
-			collapseint(LINK->ires, &V);
-		}
-		break;
-
-	case ne_rf:
-		if (foldfunction(&V))
-		{
-			if (WITH->UU.U15.fp->UU.rpr.link != NULL)
-				(*(void(*) (ne_nexrec *nex, double *res, void* _link)) WITH->UU.U15.fp->UU.rpr.proc)(*V.nex, &LINK->rres,
-					WITH->UU.U15.fp->UU.rpr.link);
-			else
-				(*(void(*) (ne_nexrec *nex, double *res)) WITH->UU.U15.fp->UU.rpr.proc)(*V.nex, &LINK->rres);
-			collapsereal(LINK->rres, &V);
-		}
-		break;
-
-		case ne_sf:
-			if (foldfunction(&V))
-			{
-    			if (WITH->UU.U15.fp->UU.spr.link != NULL)
-					(*(void(*) (ne_nexrec *nex, char *res, void* _link)) WITH->UU.U15.fp->UU.spr.proc)(*V.nex, LINK->sres,
-						WITH->UU.U15.fp->UU.spr.link);
-				else
-					(*(void(*) (ne_nexrec *nex, char *res))  WITH->UU.U15.fp->UU.spr.proc)(*V.nex, LINK->sres);
-				collapsestr(LINK->sres, &V);
-			}
-			break;
-
-		case ne_iadd:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint(WITH->UU.U10.p1->UU.i + WITH->UU.U10.p2->UU.i, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && WITH->UU.U10.p1->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_isub:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint(WITH->UU.U10.p1->UU.i - WITH->UU.U10.p2->UU.i, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_imul:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint(WITH->UU.U10.p1->UU.i * WITH->UU.U10.p2->UU.i, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && WITH->UU.U10.p1->UU.i == 1)
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == 1)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && WITH->UU.U10.p1->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			break;
-
-		case ne_idiv:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint(WITH->UU.U10.p1->UU.i / WITH->UU.U10.p2->UU.i, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && WITH->UU.U10.p1->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == 1)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == 0)
-				error(ne_divzero, &V);
-			break;
-
-		case ne_ineg:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic)
-				collapseint(-WITH->UU.U10.p1->UU.i, &V);
-			break;
-
-		case ne_radd:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc &&(ne_opkind)WITH->UU.U10.p2->op == ne_rc)
-				collapsereal(WITH->UU.U10.p1->UU.r + WITH->UU.U10.p2->UU.r, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && WITH->UU.U10.p1->UU.r == 0)
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_rc && WITH->UU.U10.p2->UU.r == 0)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_rsub:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && (ne_opkind)WITH->UU.U10.p2->op == ne_rc)
-				collapsereal(WITH->UU.U10.p1->UU.r - WITH->UU.U10.p2->UU.r, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_rc && WITH->UU.U10.p2->UU.r == 0)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_rmul:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && (ne_opkind)WITH->UU.U10.p2->op == ne_rc)
-				collapsereal(WITH->UU.U10.p1->UU.r * WITH->UU.U10.p2->UU.r, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && WITH->UU.U10.p1->UU.r == 1)
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_rc && WITH->UU.U10.p2->UU.r == 1)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && WITH->UU.U10.p1->UU.r == 0)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_rc &&
-					WITH->UU.U10.p2->UU.r == 0)
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			break;
-
-		case ne_rdiv:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && (ne_opkind)WITH->UU.U10.p2->op == ne_rc)
-				collapsereal(WITH->UU.U10.p1->UU.r / WITH->UU.U10.p2->UU.r, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && WITH->UU.U10.p1->UU.r == 0)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_rc && WITH->UU.U10.p2->UU.r == 1)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_rc && WITH->UU.U10.p2->UU.r == 0)
-				error(ne_divzero, &V);
-			break;
-
-		case ne_rpow:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && (ne_opkind)WITH->UU.U10.p2->op == ne_rc)
-				collapsereal(ma_ytox(WITH->UU.U10.p1->UU.r, WITH->UU.U10.p2->UU.r), &V);
-			break;
-
-		case ne_rneg:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapsereal(-WITH->UU.U10.p1->UU.r, &V);
-			break;
-
-		case ne_sadd:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_sc && (ne_opkind)WITH->UU.U10.p2->op == ne_sc)
-			{
-				if (strlen(WITH->UU.U10.p1->UU.s) + strlen(WITH->UU.U10.p2->UU.s) > 255)
-				{
-					error(ne_strlong, &V);
-				}
-				else
-				{
-					sprintf(STR1, "%s%s", WITH->UU.U10.p1->UU.s, WITH->UU.U10.p2->UU.s);
-					collapsestr(STR1, &V);
-				}
-			}
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_sc && *WITH->UU.U10.p1->UU.s == '\0')
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_sc && *WITH->UU.U10.p2->UU.s == '\0')
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_itor:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic)
-				collapsereal((double)WITH->UU.U10.p1->UU.i, &V);
-			break;
-
-		case ne_imod:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-			{
-				collapseint(WITH->UU.U10.p1->UU.i % WITH->UU.U10.p2->UU.i, &V);
-			}
-			break;
-
-		case ne_rbool:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapseint((long)(WITH->UU.U10.p1->UU.r != 0), &V);
-			break;
-
-		case ne_sbool:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_sc)
-				collapseint((long)(*WITH->UU.U10.p1->UU.s != '\0'), &V);
-			break;
-
-		case ne_ieq:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint((long)(WITH->UU.U10.p1->UU.i == WITH->UU.U10.p2->UU.i), &V);
-			break;
-
-		case ne_ine:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint((long)(WITH->UU.U10.p1->UU.i != WITH->UU.U10.p2->UU.i), &V);
-			break;
-
-		case ne_ilt:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint((long)(WITH->UU.U10.p1->UU.i < WITH->UU.U10.p2->UU.i), &V);
-			break;
-
-		case ne_ile:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint((long)(WITH->UU.U10.p1->UU.i <= WITH->UU.U10.p2->UU.i), &V);
-			break;
-
-		case ne_igt:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint((long)(WITH->UU.U10.p1->UU.i > WITH->UU.U10.p2->UU.i), &V);
-			break;
-
-		case ne_ige:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint((long)(WITH->UU.U10.p1->UU.i >= WITH->UU.U10.p2->UU.i), &V);
-			break;
-
-		case ne_req:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && (ne_opkind)WITH->UU.U10.p2->op == ne_rc)
-				collapseint((long)(WITH->UU.U10.p1->UU.r == WITH->UU.U10.p2->UU.r), &V);
-			break;
-
-		case ne_rne:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && (ne_opkind)WITH->UU.U10.p2->op == ne_rc)
-				collapseint((long)(WITH->UU.U10.p1->UU.r != WITH->UU.U10.p2->UU.r), &V);
-			break;
-
-		case ne_rlt:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && (ne_opkind)WITH->UU.U10.p2->op == ne_rc)
-				collapseint((long)(WITH->UU.U10.p1->UU.r < WITH->UU.U10.p2->UU.r), &V);
-			break;
-
-		case ne_rle:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && (ne_opkind)WITH->UU.U10.p2->op == ne_rc)
-				collapseint((long)(WITH->UU.U10.p1->UU.r <= WITH->UU.U10.p2->UU.r), &V);
-			break;
-
-		case ne_rgt:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && (ne_opkind)WITH->UU.U10.p2->op == ne_rc)
-				collapseint((long)(WITH->UU.U10.p1->UU.r > WITH->UU.U10.p2->UU.r), &V);
-			break;
-
-		case ne_rge:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc && (ne_opkind)WITH->UU.U10.p2->op == ne_rc)
-				collapseint((long)(WITH->UU.U10.p1->UU.r >= WITH->UU.U10.p2->UU.r), &V);
-			break;
-
-		case ne_seq:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_sc && (ne_opkind)WITH->UU.U10.p2->op == ne_sc)
-				collapseint((long)(strcmp(WITH->UU.U10.p1->UU.s, WITH->UU.U10.p2->UU.s) == 0), &V);
-			break;
-
-		case ne_sne:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_sc && (ne_opkind)WITH->UU.U10.p2->op == ne_sc)
-				collapseint((long)(strcmp(WITH->UU.U10.p1->UU.s, WITH->UU.U10.p2->UU.s) != 0), &V);
-			break;
-
-		case ne_slt:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_sc && (ne_opkind)WITH->UU.U10.p2->op == ne_sc)
-				collapseint((long)(strcmp(WITH->UU.U10.p1->UU.s, WITH->UU.U10.p2->UU.s) < 0), &V);
-			break;
-
-		case ne_sle:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_sc && (ne_opkind)WITH->UU.U10.p2->op == ne_sc)
-				collapseint((long)(strcmp(WITH->UU.U10.p1->UU.s, WITH->UU.U10.p2->UU.s) <= 0), &V);
-			break;
-
-		case ne_sgt:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_sc && (ne_opkind)WITH->UU.U10.p2->op == ne_sc)
-				collapseint((long)(strcmp(WITH->UU.U10.p1->UU.s, WITH->UU.U10.p2->UU.s) > 0), &V);
-			break;
-
-		case ne_sge:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_sc && (ne_opkind)WITH->UU.U10.p2->op == ne_sc)
-				collapseint((long)(strcmp(WITH->UU.U10.p1->UU.s, WITH->UU.U10.p2->UU.s) >= 0), &V);
-			break;
-
-		case ne_not:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic)
-				collapseint(~WITH->UU.U10.p1->UU.i, &V);
-			break;
-
-		case ne_and:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint(WITH->UU.U10.p1->UU.i & WITH->UU.U10.p2->UU.i, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && WITH->UU.U10.p1->UU.i == -1)
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == -1)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && WITH->UU.U10.p1->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			break;
-
-		case ne_or:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint(WITH->UU.U10.p1->UU.i | WITH->UU.U10.p2->UU.i, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && WITH->UU.U10.p1->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && WITH->UU.U10.p1->UU.i == -1)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == -1)
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			break;
-
-		case ne_xor:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint(WITH->UU.U10.p1->UU.i ^ WITH->UU.U10.p2->UU.i, &V);
-			else if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && WITH->UU.U10.p1->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p2, WITH->UU.U10.p1, &V);
-			else if ((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == 0)
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_lsh:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint(WITH->UU.U10.p1->UU.i << WITH->UU.U10.p2->UU.i, &V);
-			else if (((ne_opkind)WITH->UU.U10.p1->op == ne_ic && WITH->UU.U10.p1->UU.i == 0) ||
-					((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == 0))
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_rsh:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic && (ne_opkind)WITH->UU.U10.p2->op == ne_ic)
-				collapseint(WITH->UU.U10.p1->UU.i >> WITH->UU.U10.p2->UU.i, &V);
-			else if (((ne_opkind)WITH->UU.U10.p1->op == ne_ic && WITH->UU.U10.p1->UU.i == 0) ||
-					((ne_opkind)WITH->UU.U10.p2->op == ne_ic && WITH->UU.U10.p2->UU.i == 0))
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_lnot:
-			optimize(&WITH->UU.U10.p1, LINK->desc, LINK->which, LINK->mode);
-			if (istrue(WITH->UU.U10.p1, &V))
-				collapseint(0L, &V);
-			else if (isfalse(WITH->UU.U10.p1, &V))
-				collapseint(1L, &V);
-			break;
-
-		case ne_iand:
-			optimize(&WITH->UU.U10.p1, LINK->desc, LINK->which, LINK->mode);
-			if (istrue(WITH->UU.U10.p1, &V))
-				collapsehalf(opt(&WITH->UU.U10.p2, LINK), WITH->UU.U10.p1, &V);
-			else if (isfalse(WITH->UU.U10.p1, &V))
-				collapseint(0L, &V);
-			break;
-
-		case ne_ior:
-			optimize(&WITH->UU.U10.p1, LINK->desc, LINK->which, LINK->mode);
-			if (isfalse(WITH->UU.U10.p1, &V))
-				collapsehalf(opt(&WITH->UU.U10.p2, LINK), WITH->UU.U10.p1, &V);
-			else if (istrue(WITH->UU.U10.p1, &V))
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_rand:
-			optimize(&WITH->UU.U10.p1, LINK->desc, LINK->which, LINK->mode);
-			if (istrue(WITH->UU.U10.p1, &V))
-				collapsehalf(opt(&WITH->UU.U10.p2, LINK), WITH->UU.U10.p1, &V);
-			else if (isfalse(WITH->UU.U10.p1, &V))
-				collapsereal(0.0, &V);
-			break;
-
-		case ne_ror:
-			optimize(&WITH->UU.U10.p1, LINK->desc, LINK->which, LINK->mode);
-			if (isfalse(WITH->UU.U10.p1, &V))
-				collapsehalf(opt(&WITH->UU.U10.p2, LINK), WITH->UU.U10.p1, &V);
-			else if (istrue(WITH->UU.U10.p1, &V))
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_rxor:
-			optimize(&WITH->UU.U10.p1, LINK->desc, LINK->which, LINK->mode);
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_error && (ne_errorkind)WITH->UU.U10.p1->UU.err == ne_badval)
-				collapsehalf(opt(&WITH->UU.U10.p2, LINK), WITH->UU.U10.p1, &V);
-			else if (istrue(WITH->UU.U10.p1, &V))
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_sand:
-			optimize(&WITH->UU.U10.p1, LINK->desc, LINK->which, LINK->mode);
-			if (istrue(WITH->UU.U10.p1, &V))
-				collapsehalf(opt(&WITH->UU.U10.p2, LINK), WITH->UU.U10.p1, &V);
-			else if (isfalse(WITH->UU.U10.p1, &V))
-				collapsestr("", &V);
-			break;
-
-		case ne_sor:
-			optimize(&WITH->UU.U10.p1, LINK->desc, LINK->which, LINK->mode);
-			if (isfalse(WITH->UU.U10.p1, &V))
-				collapsehalf(opt(&WITH->UU.U10.p2, LINK), WITH->UU.U10.p1, &V);
-			else if (istrue(WITH->UU.U10.p1, &V))
-				collapsehalf(WITH->UU.U10.p1, WITH->UU.U10.p2, &V);
-			break;
-
-		case ne_icond:
-		case ne_rcond:
-		case ne_scond:
-			optimize(&WITH->UU.U10.p1, LINK->desc, LINK->which, LINK->mode);
-			if (isfalse(WITH->UU.U10.p1, &V))
-				collapsecond(WITH->UU.U10.p1, opt(&WITH->UU.U10.p3, LINK), WITH->UU.U10.p2, &V);
-			else if (istrue(WITH->UU.U10.p1, &V))
-				collapsecond(WITH->UU.U10.p1, opt(&WITH->UU.U10.p2, LINK), WITH->UU.U10.p3, &V);
-			break;
-
-		case ne_round:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapseint((long)floor(WITH->UU.U10.p1->UU.r + 0.5), &V);
-			break;
-
-		case ne_trunc:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapseint((long)WITH->UU.U10.p1->UU.r, &V);
-			break;
-
-		case ne_ln:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapsereal(log(WITH->UU.U10.p1->UU.r), &V);
-			break;
-
-		case ne_exp:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapsereal(exp(WITH->UU.U10.p1->UU.r), &V);
-			break;
-
-		case ne_iabs:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_ic)
-				collapseint(labs(WITH->UU.U10.p1->UU.i), &V);
-			break;
-
-		case ne_rabs:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapsereal(fabs(WITH->UU.U10.p1->UU.r), &V);
-			break;
-
-		case ne_sqrt:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapsereal(sqrt(WITH->UU.U10.p1->UU.r), &V);
-			break;
-
-		case ne_sin:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapsereal(sin(WITH->UU.U10.p1->UU.r), &V);
-			break;
-
-		case ne_cos:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapsereal(cos(WITH->UU.U10.p1->UU.r), &V);
-			break;
-
-		case ne_tan:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapsereal(tan(WITH->UU.U10.p1->UU.r), &V);
-			break;
-
-		case ne_arctan:
-			if ((ne_opkind)WITH->UU.U10.p1->op == ne_rc)
-				collapsereal(atan(WITH->UU.U10.p1->UU.r), &V);
-		    break;
-
-		default:
-			break;
-	}
-	return (*V.nex);
-}
-
-
-static void optimize(ne_nexrec **nex, ne_desc *desc_, strlist_t *which_, long mode_)
-{
-	struct LOC_optimize V;
-
-	V.desc = desc_;
-	V.which = which_;
-	V.mode = mode_;
-	V.err = ne_noerror;
-	TRY(try1);
-	*nex = opt(nex, &V);
-	RECOVER(try1);
-	if (P_escapecode == -20)
-		_Escape(P_escapecode);
-	if (V.err == ne_noerror)
-	{
-		switch (P_escapecode)
-		{
-			case -5:
-				V.err = ne_divzero;
-				break;
-
-			case -7:
-				V.err = ne_underflow;
-				break;
-
-			default:
-				V.err = ne_overflow;
-				break;
-		}
-	}
-	ne_dispose(nex);
-	*nex = ne_makeerror(V.err);
-	ENDTRY(try1);
-	if ((ne_opkind)(*nex)->op == ne_error)
-		V.desc->error = (unsigned)((ne_errorkind)(*nex)->UU.err);
-	else
-		V.desc->error = (unsigned)ne_noerror;
-}
-
-
-void ne_constant(ne_nexrec **nex, ne_desc *desc, char *which_)
-{
-	char which[256];
-	strlist_t *l1, *l2;
-	char buf[256];
-
-	strcpy(which, which_);
-	if (!desc->casesens)
-		strupper(which, which);
-	l1 = NULL;
-	do {
-		strword(which, buf);
-		if (*buf != '\0')
-			l2 = strlist_add(&l1, buf);
-	} while (*which != '\0');
-	optimize(nex, desc, l1, 1L);
-	strlist_empty(&l1);
-}
-
-
-void ne_notconstant(ne_nexrec **nex, ne_desc *desc, char *which_)
-{
-	char which[256];
-	strlist_t *l1, *l2;
-	char buf[256];
-
-	strcpy(which, which_);
-	if (!desc->casesens)
-		strupper(which, which);
-	l1 = NULL;
-	do {
-		strword(which, buf);
-		if (*buf != '\0')
-			l2 = strlist_add(&l1, buf);
-	} while (*which != '\0');
-	optimize(nex, desc, l1, 2L);
-	strlist_empty(&l1);
-}
-
-
-void ne_constantlist(ne_nexrec **nex, ne_desc *desc, strlist_t *which)
-{
-	 optimize(nex, desc, which, 1L);
-}
-
-void ne_notconstantlist(ne_nexrec **nex, ne_desc *desc, strlist_t *which)
-{
-	optimize(nex, desc, which, 2L);
-}
-
-static ne_nexrec *make2(ne_opkind op, ne_nexrec *nex, ne_nexrec *nex2)
-{
-	ne_nexrec *n;
-
-	newnexrec(&n, (long)((nex != NULL) + (nex2 != NULL)), op);
-	n->UU.U10.p1 = nex;
-	n->UU.U10.p2 = nex2;
-	return n;
-}
-
-static ne_nexrec *make3(ne_opkind op, ne_nexrec *nex, ne_nexrec *nex2, ne_nexrec *nex3)
-{
-	ne_nexrec *n;
-
-	newnexrec(&n, 3L, op);
-	n->UU.U10.p1 = nex;
-	n->UU.U10.p2 = nex2;
-	n->UU.U10.p3 = nex3;
-  return n;
-}
-
-ne_nexrec *ne_typecast(ne_nexrec *nex, ne_datatype typ)
-{
-	switch (typ)
-	{
-
-		case ne_notype:
-			ne_dispose(&nex);
-			nex = ne_makeerror(ne_badtypes);
-			break;
-
-		case ne_integer:
-			if (realp(nex))
-			{
-				nex = make2(ne_round, nex, NULL);
-			}
-			else if (!integerp(nex))
-			{
-				ne_dispose(&nex);
-				nex = ne_makeerror(ne_badtypes);
-			}
-			break;
-
-		case ne_real:
-			if (integerp(nex))
-			{
-				nex = make2(ne_itor, nex, NULL);
-			}
-			else if (!realp(nex))
-			{
-				ne_dispose(&nex);
-				nex = ne_makeerror(ne_badtypes);
-			}
-			break;
-
-		case ne_string:
-			if (!stringp(nex))
-			{
-				ne_dispose(&nex);
-				nex = ne_makeerror(ne_badtypes);
-			}
-			break;
-
-		case ne_boolean:
-			if (realp(nex))
-				nex = make2(ne_rbool, nex, NULL);
-			else if (stringp(nex))
-				nex = make2(ne_sbool, nex, NULL);
-			break;
-	}
-	return nex;
-}
-
-
-/* Local variables for ne_intcompile: */
-struct LOC_ne_intcompile
-{
-  char *ex;
-  ne_desc *desc;
-  long p;
-} ;
-
-static ne_nexrec *expr (long prec, struct LOC_ne_intcompile *LINK);
-
-static void seterror(ne_errorkind errk, struct LOC_ne_intcompile *LINK)
-{
-	if ((ne_errorkind)LINK->desc->error == ne_noerror)
-		LINK->desc->error = (unsigned)errk;
-	LINK->p = 0;
-	while (LINK->ex[LINK->p - 1] != '\0')
-		LINK->p++;
-}
-
-static void error_(ne_errorkind errk, ne_nexrec **nex1, ne_nexrec *nex2, struct LOC_ne_intcompile *LINK)
-{
-	ne_dispose(nex1);
-	ne_dispose(&nex2);
-	seterror(errk, LINK);
-}
-
-static char skipspc(struct LOC_ne_intcompile *LINK)
-{
-	while (LINK->ex[LINK->p - 1] == ' ')
-		LINK->p++;
-	return (LINK->ex[LINK->p - 1]);
-}
-
-/* Local variables for expr: */
-struct LOC_expr
-{
-	struct LOC_ne_intcompile *LINK;
-} ;
-
-static ne_nexrec *parexp(struct LOC_expr *LINK)
-{
-	ne_nexrec *nex;
-	char ch, ch2;
-
-	nex = NULL;
-	ch = skipspc(LINK->LINK);
-	if (ch != '(' && ch != '[') {
-		error_(ne_syntax, &nex, NULL, LINK->LINK);
-		return nex;
-	}
-	LINK->LINK->p++;
-	nex = expr(0L, LINK->LINK);
-	ch2 = skipspc(LINK->LINK);
-	if ((ch == '(' && ch2 == ')') || (ch == '[' && ch2 == ']'))
-		LINK->LINK->p++;
-	else
-		error_(ne_syntax, &nex, NULL, LINK->LINK);
-	return nex;
-}
-
-static ne_nexrec *factor(struct LOC_expr *LINK)
-{
-	char ch, ch2, kind;
-	char name[256];
-	ne_nexrec *nex;
-	ne_nexrec **args;
-	ne_datatype atype;
-	na_long value;
-	strlist_t *l1;
-	double *rp;
-	ne_functionrec *fp;
-	long i, p0;
-	double r;
-	int done;
-	char TEMP;
-	long FORLIM;
-	int allocdone; /* flag for deallocation */
-	void* tryalloc;
-
-	nex = NULL;
-	allocdone = 0;
-	ch = skipspc(LINK->LINK);
-	if (P_inset(ch, LINK->LINK->desc->startident))
-	{
-		*name = '\0';
-		while (P_inset(LINK->LINK->ex[LINK->LINK->p - 1], LINK->LINK->desc->ident) ||
-				P_inset(LINK->LINK->ex[LINK->LINK->p - 1], LINK->LINK->desc->startident))
-		{
-			sprintf(name + strlen(name), "%c", LINK->LINK->ex[LINK->LINK->p - 1]);
-			LINK->LINK->p++;
-		}
-		if (!LINK->LINK->desc->casesens)
-			strupper(name, name);
-		ch = skipspc(LINK->LINK);
-		LINK->LINK->desc->isfunc = (ch == '[' || ch == '(');
-		kind = ' ';
-		l1 = NULL;
-		if (LINK->LINK->desc->symproc.link != NULL)
-			(*(void(*) (char *name, ne_desc *desc, strlist_t **symptr, void* _link))LINK->LINK->desc->symproc.proc)(name,
-					LINK->LINK->desc, &l1, LINK->LINK->desc->symproc.link);
-		else
-			(*(void(*) (char *name, ne_desc *desc, strlist_t **symptr)) LINK->LINK->desc->symproc.proc)(name, LINK->LINK->desc, &l1);
-		if (l1 != NULL)
-		{
-			kind = l1->kind;
-			value = l1->value;
-		} else {
-			kind = 255;
-		}
-		switch (kind)
-		{
-
-			case ne_kind_intconst:
-				nex = make2(ne_ic, NULL, NULL);
-				nex->UU.i = (long)value;
-				break;
-
-			case ne_kind_intvalue:
-				nex = make2(ne_ip, NULL, NULL);
-				nex->UU.U10.ip = (long*)(&l1->value);
-				nex->UU.U10.ips = l1;
-				break;
-
-			case ne_kind_intptr:
-				nex = make2(ne_ip, NULL, NULL);
-				nex->UU.U10.ip = (long *)value;
-				nex->UU.U10.ips = l1;
-				break;
-
-			case ne_kind_realconst:
-				nex = make2(ne_rc, NULL, NULL);
-				rp = (double *)value;
-				nex->UU.r = *rp;
-				break;
-
-			case ne_kind_srealconst:
-				nex = make2(ne_rc, NULL, NULL);
-				nex->UU.r = na_srtor(value);
-				break;
-
-			case ne_kind_realptr:
-				nex = make2(ne_rp, NULL, NULL);
-				nex->UU.U11.rp = (double *)value;
-				nex->UU.U11.rps = l1;
-				break;
-
-			case ne_kind_realxptr:
-				nex = make2(ne_rxp, NULL, NULL);
-				nex->UU.U11.rp = (double *)value;
-				nex->UU.U11.rps = l1;
-				break;
-
-			case ne_kind_strconst:
-				nex = make2(ne_sc, NULL, NULL);
-				nex->UU.s = (char *)strdup((char *)value);
-				break;
-
-			case ne_kind_strvalue:
-				nex = make2(ne_sp, NULL, NULL);
-				nex->UU.U12.sp = (char **)(&l1->value);
-				nex->UU.U12.sps = l1;
-				break;
-
-			case ne_kind_strptr:
-				nex = make2(ne_sp, NULL, NULL);
-				nex->UU.U12.sp = (char **)value;
-				nex->UU.U12.sps = l1;
-				break;
-
-			case ne_kind_intfunc:
-			case ne_kind_realfunc:
-			case ne_kind_strfunc:
-				fp = (ne_functionrec *)value;
-				tryalloc = (void* *)(&args); /*G. Liu + */
-				na_alloc(tryalloc,fp->maxargs *sizeof(ne_nexrec *));  /* G. Liu + */
-				allocdone = 1;
-				i = 0;
-				if (ch == '[' || ch == '(') {
-					LINK->LINK->p++;
-					TEMP = skipspc(LINK->LINK);
-					if (!(TEMP == ']' || TEMP == ')'))
-					{
-						done = false;
-						while (!done && i < fp->maxargs)
-						{
-							i++;
-							if (fp->nargs > 0)
-							{
-								atype = fp->UU.U99.ptypes[P_imin2(i, (long)fp->nargs) - 1];
-								args[i - 1] = ne_typecast(expr(0L, LINK->LINK), atype);
-							}
-							else if (fp->subnex)
-							{
-								args[i - 1] = ne_typecast(expr(0L, LINK->LINK), ne_real);
-							}
-							else
-							{
-								args[i - 1] = expr(0L, LINK->LINK);
-							}
-
-							if ((ne_opkind)args[i - 1]->op == ne_error)
-								error_((ne_errorkind)args[i - 1]->UU.err, &args[i - 1], NULL, LINK->LINK);
-
-							if (skipspc(LINK->LINK) == ',')
-								LINK->LINK->p++;
-							else
-								done = true;
-						}
-						if (!done)
-							seterror(ne_syntax, LINK->LINK);
-					}
-					ch2 = skipspc(LINK->LINK);
-					if ((ch == '(' && ch2 == ')') || (ch == '[' && ch2 == ']'))
-						LINK->LINK->p++;
-					else
-						seterror(ne_syntax, LINK->LINK);
-				}
-				if (i < fp->minargs)
-					seterror(ne_syntax, LINK->LINK);
-				if ((ne_errorkind)LINK->LINK->desc->error == ne_noerror)
-				{
-					switch (kind)
-					{
-
-						case ne_kind_intfunc:
-							newnexrec(&nex, i, ne_if);
-							break;
-
-						case ne_kind_realfunc:
-							newnexrec(&nex, i, ne_rf);
-							break;
-
-						case ne_kind_strfunc:
-							newnexrec(&nex, i, ne_sf);
-							break;
-					}
-					FORLIM = nex->nargs;
-					for (i = 0; i < FORLIM; i++)
-						nex->UU.U99.pvals[i] = args[i];
-					nex->UU.U15.fp = fp;
-					nex->UU.U15.fps = l1;
-				}
-				break;
-
-			case ne_kind_intarg:
-				nex = make2(ne_iarg, NULL, NULL);
-				nex->UU.i = (long)value;
-				break;
-
-			case ne_kind_realarg:
-				nex = make2(ne_rarg, NULL, NULL);
-				nex->UU.i = (long)value;
-				break;
-
-			case ne_kind_strarg:
-				nex = make2(ne_sarg, NULL, NULL);
-				nex->UU.i = (long)value;
-				break;
-
-			case ne_kind_nex:
-				if (value == NULL)
-					error_(ne_undef, &nex, NULL, LINK->LINK);
-				else
-					ne_copy((ne_nexrec *)value, &nex);
-				break;
-
-			default:
-				if (LINK->LINK->desc->builtin)
-				{
-					i = numbuiltins;
-					while (i >= 1 && strcmp(builtins[i - 1].name, name))
-						i--;
-				} else
-					i = 0;
-				if (i >= 1)
-				{
-					switch (builtins[i - 1].kind)
-					{
-
-						case 'A':
-							nex = parexp(LINK);
-							if (realp(nex))
-								nex = make2(builtins[i - 1].op, nex, NULL);
-							else if (!integerp(nex))
-								error_(ne_badtypes, &nex, NULL, LINK->LINK);
-							break;
-
-						case 'B':
-							nex = ne_typecast(parexp(LINK), ne_real);
-							if ((ne_opkind)nex->op == ne_error)
-								error_((ne_errorkind)nex->UU.err, &nex, NULL, LINK->LINK);
-							nex = make2(builtins[i - 1].op, nex, NULL);
-							break;
-
-						case 'C':
-							nex = parexp(LINK);
-							if (integerp(nex))
-								nex = make2(builtins[i - 1].op, nex, NULL);
-							else if (realp(nex))
-								nex = make2((ne_opkind)((long)builtins[i - 1].op + 1), nex, NULL);
-							else
-								error_(ne_badtypes, &nex, NULL, LINK->LINK);
-							break;
-
-						case 'P':
-							nex = make2(ne_rc, NULL, NULL);
-							nex->UU.r = 3.1415926536;
-							break;
-					}
-				} else
-					error_(ne_undef, &nex, NULL, LINK->LINK);
-				break;
-		}
-		if (allocdone)
-			na_free((void*)&args);
-		return nex;
-	}
-
-	if (ch == '+')
-	{
-		LINK->LINK->p++;
-		nex = expr((long)neg_prec, LINK->LINK);
-		if (allocdone)
-			na_free((void*)&args);
-		return nex;
-	}
-
-	if (ch == '-')
-	{
-		LINK->LINK->p++;
-		nex = expr((long)neg_prec, LINK->LINK);
-		if (realp(nex)) {
-			nex = make2(ne_rneg, nex, NULL);
-			if (allocdone)
-				na_free((void*)&args);
-			return nex;
-		}
-		if (integerp(nex))
-			nex = make2(ne_ineg, nex, NULL);
-		else
-			error_(ne_badtypes, &nex, NULL, LINK->LINK);
-		if (allocdone)
-			na_free((void*)&args);
-		return nex;
-	}
-
-	if (ch == '!')
-	{
-		LINK->LINK->p++;
-		nex = ne_typecast(expr((long)lnot_prec, LINK->LINK), ne_boolean);
-		nex = make2(ne_lnot, nex, NULL);
-		if (allocdone)
-			na_free((void*)&args);
-		return nex;
-	}
-
-	if (ch == '~')
-	{
-		LINK->LINK->p++;
-		nex = expr((long)not_prec, LINK->LINK);
-		if (realp(nex))
-			nex = make2(ne_round, nex, NULL);
-		if (integerp(nex))
-			nex = make2(ne_not, nex, NULL);
-		else
-			error_(ne_badtypes, &nex, NULL, LINK->LINK);
-		if (allocdone)
-			na_free((void*)&args);
-		return nex;
-	}
-
-	if (ch == '#' || ch == '\'' || ch == '"')
-	{
-		*name = '\0';
-		done = false;
-		do
-		{
-			ch = skipspc(LINK->LINK);
-			if (ch == '#')
-			{
-				ch = toupper(LINK->LINK->ex[LINK->LINK->p]);
-				if (ch >= '@' && ch <= '_')
-				{
-					sprintf(name + strlen(name), "%c", ch - 64);
-					LINK->LINK->p += 2;
-				}
-				else if (isdigit(ch))
-				{
-					i = 0;
-					LINK->LINK->p++;
-					while (isdigit(LINK->LINK->ex[LINK->LINK->p - 1]))
-					{
-						i = i * 10 + LINK->LINK->ex[LINK->LINK->p - 1] - 48;
-						LINK->LINK->p++;
-					}
-					sprintf(name + strlen(name), "%c", (char)(i & 255));
-				}
-				else
-				{
-					done = true;
-				}
-			}
-			else if (ch == '\'' || ch == '"')
-			{
-				done = false;
-				do
-				{
-					LINK->LINK->p++;
-					if (LINK->LINK->ex[LINK->LINK->p - 1] == ch)
-					{
-						if (LINK->LINK->ex[LINK->LINK->p] == ch)
-						{
-							sprintf(name + strlen(name), "%c", ch);
-							LINK->LINK->p++;
-						}
-						else
-						{
-							done = true;
-						}
-					}
-					else if (LINK->LINK->ex[LINK->LINK->p - 1] == '\0')
-					{
-						done = true;
-					}
-					else
-					{
-						sprintf(name + strlen(name), "%c", LINK->LINK->ex[LINK->LINK->p - 1]);
-					}
-				} while (!done);
-				if (LINK->LINK->ex[LINK->LINK->p - 1] == ch)
-					LINK->LINK->p++;
-				done = false;
-			}
-			else
-			{
-				done = true;
-			}
-		} while (!done);
-		nex = make2(ne_sc, nex, NULL);
-		nex->UU.s = (char *)strdup(name);
-		if (allocdone)
-			na_free((void*)&args);
-		return nex;
-	}
-
-	if (ch == '[' || ch == '(')
-	{
-		nex = parexp(LINK);
-		if (allocdone)
-			na_free((void*)&args);
-		return nex;
-	}
-
-	if (!(ch == '.' || isdigit(ch)))
-	{
-		error_(ne_syntax, &nex, NULL, LINK->LINK);
-		if (allocdone)
-			na_free((void*)&args);
-		return nex;
-	}
-
-	i = 0;
-	p0 = LINK->LINK->p;
-	while (isdigit(LINK->LINK->ex[LINK->LINK->p - 1]) && (i < 214748364L ||
-				(i == 214748364L && LINK->LINK->ex[LINK->LINK->p - 1] >= '0' &&
-				 LINK->LINK->ex[LINK->LINK->p - 1] <= '7')))
-	{
-		i = i * 10 + LINK->LINK->ex[LINK->LINK->p - 1] - '0';
-		LINK->LINK->p++;
-	}
-	TEMP = skipspc(LINK->LINK);
-
-	if (!(TEMP == '.' || isalnum(TEMP)))
-	{
-		nex = make2(ne_ic, NULL, NULL);
-		nex->UU.i = i;
-		if (allocdone)
-			na_free((void*)&args);
-		return nex;
-	}
-
-	LINK->LINK->p = p0;
-	if (readreal(LINK->LINK->ex, &LINK->LINK->p, &r, LINK->LINK->desc))
-	{
-		nex = make2(ne_rc, NULL, NULL);
-		nex->UU.r = r;
-	}
-	else
-	{
-		error_(ne_syntax, &nex, NULL, LINK->LINK);
-	}
-
-	if (allocdone)
-	{
-		na_free((void*)&args);
-	}
-	return nex;
-}
-
-static ne_nexrec *expr(long prec, struct LOC_ne_intcompile *LINK)
-{
-  	struct LOC_expr V;
-	ne_nexrec *nex, *nex2, *nex3;
-	char ch;
-	long opn, dp;
-
-	V.LINK = LINK;
-	nex = factor(&V);
-	do
-	{
-		ch = skipspc(LINK);
-		dp = 1;
-		if (ch == '=' && LINK->ex[LINK->p] == '=')
-		{
-			dp = 2;
-		}
-		else if (ch == '!' && LINK->ex[LINK->p] == '=')
-		{
-			ch = '\001';   /*ne*/
-			dp = 2;
-		}
-		else if (ch == '<')
-		{
-			if (LINK->ex[LINK->p] == '>')
-			{
-				ch = '\001';   /*ne*/
-				dp = 2;
-			}
-			else if (LINK->ex[LINK->p] == '=')
-			{
-				ch = '\002';   /*le*/
-				dp = 2;
-			}
-			else if (LINK->ex[LINK->p] == '<')
-			{
-				ch = '\006';   /*lsh*/
-				dp = 2;
-			}
-		}
-		else if (ch == '>')
-		{
-			if (LINK->ex[LINK->p] == '=')
-			{
-				ch = '\003';   /*ge*/
-				dp = 2;
-			}
-			else if (LINK->ex[LINK->p] == '>')
-			{
-				ch = '\007';   /*rsh*/
-				dp = 2;
-			}
-		}
-		else if (ch == '&' && LINK->ex[LINK->p] == '&')
-		{
-			ch = '\004';   /*log. and*/
-			dp = 2;
-		}
-		else if (ch == '|' && LINK->ex[LINK->p] == '|')
-		{
-			ch = '\005';   /*log. or*/
-			dp = 2;
-		}
-		else if (ch == '!' && LINK->ex[LINK->p] == '!')
-		{
-			ch = '\b';   /*log. X-checking or*/
-			dp = 2;
-		}
-
-		opn = numopersyms;
-		while (opn >= 1 && opers[opn - 1].name != ch)
-			opn--;
-
-		if (opn >= 1 && opers[opn - 1].lprec > prec)
-		{
-			if (ch == '?')
-			{
-				LINK->p++;
-				nex = ne_typecast(nex, ne_boolean);
-				nex2 = expr(0L, LINK);
-				if (skipspc(LINK) == ':')
-				{
-					LINK->p++;
-					nex3 = expr((long)opers[opn - 1].rprec, LINK);
-					if (stringp(nex2) && stringp(nex3))
-					{
-						nex = make3(ne_scond, nex, nex2, nex3);
-					}
-					else if (!stringp(nex2) && !stringp(nex3))
-					{
-						if (realp(nex2) || realp(nex3))
-							nex = make3(ne_rcond, nex, ne_typecast(nex2, ne_real), ne_typecast(nex3, ne_real));
-						else
-							nex = make3(ne_icond, nex, nex2, nex3);
-					}
-					else
-					{
-						ne_dispose(&nex3);
-						error_(ne_badtypes, &nex, nex2, LINK);
-					}
-				}
-				else
-				{
-					error_(ne_syntax, &nex, nex2, LINK);
-				}
-			}
-			else
-			{
-				LINK->p += dp;
-				nex2 = expr((long)opers[opn - 1].rprec, LINK);
-				if (stringp(nex) && stringp(nex2) && (ne_opkind)opers[opn - 1].sop != ne_error)
-				{
-					nex = make2((ne_opkind)opers[opn - 1].sop, nex, nex2);
-				}
-				else if (stringp(nex) || stringp(nex2))
-				{
-					error_(ne_badtypes, &nex, nex2, LINK);
-				}
-				else if (integerp(nex) && integerp(nex2) && (ne_opkind)opers[opn - 1].iop != ne_error)
-				{
-					nex = make2((ne_opkind)opers[opn - 1].iop, nex, nex2);
-				}
-				else if ((ne_opkind)opers[opn - 1].rop != ne_error)
-				{
-					if (integerp(nex))
-						nex = make2(ne_itor, nex, NULL);
-					if (integerp(nex2))
-						nex2 = make2(ne_itor, nex2, NULL);
-					nex = make2((ne_opkind)opers[opn - 1].rop, nex, nex2);
-				}
-				else
-				{
-					if (realp(nex))
-						nex = make2(ne_round, nex, NULL);
-					if (realp(nex2))
-						nex2 = make2(ne_round, nex2, NULL);
-					nex = make2((ne_opkind)opers[opn - 1].iop, nex, nex2);
-				}
-			}
-		}
-	} while (opn >= 1 && opers[opn - 1].lprec > prec);
-
-	return nex;
-}
-
-
-void ne_intcompile(char *ex_, long *endp, ne_nexrec **nex, ne_desc *desc_)
-{
-	struct LOC_ne_intcompile V;
-	long startp;
-
-	V.ex = ex_;
-	V.desc = desc_;
-	*nex = NULL;
-	V.desc->error = (unsigned)ne_noerror;
-	V.p = *endp;
-	startp = *endp;
-	*nex = expr(0L, &V);
-	if ((ne_errorkind)V.desc->error == ne_noerror)
-	{
-		*endp = V.p;
-		return;
-	}
-	ne_dispose(nex);
-	*nex = ne_makeerror((ne_errorkind)V.desc->error);
-	*endp = startp;
-}
-
-
-void ne_compile(char *ex_, ne_nexrec **nex, ne_desc *desc)
-{
-	char ex[256];
-	long len, endp;
-	char STR1[256];
-
-	strcpy(ex, ex_);
-	if (strlen(ex) == 255)
-	{
-		desc->error = (unsigned)ne_strlong;
-		*nex = ne_makeerror(ne_strlong);
-		return;
-	}
-	len = strlen(ex);
-	strcpy(STR1, ex);
-	strcpy(ex, STR1);
-	endp = 1;
-	ne_intcompile(ex, &endp, nex, desc);
-	if (endp == len + 1)
-	{
-		if ((ne_errorkind)desc->error == ne_noerror)
-			optimize(nex, desc, NULL, 0L);
-		return;
-	}
-	desc->error = (unsigned)ne_syntax;
-	ne_dispose(nex);
-	*nex = ne_makeerror(ne_syntax);
-}
-
-/* Local variables for ne_uncompile: */
-struct LOC_ne_uncompile
-{
-	char *ex;
-	ne_desc *desc;
-	ne_opkind lastop;
-	char ch;
-	int flag;
-} ;
-
-static void uncompile (ne_nexrec *nex, int prec, struct LOC_ne_uncompile *LINK);
-
-static void append(char *s, struct LOC_ne_uncompile *LINK)
-{
-	long i;
-
-	i = strlen(LINK->ex) + strlen(s) - 255;
-	if (i < 1) {
-		strcat(LINK->ex, s);
-		return;
-	}
-	if (i > 1)
-		sprintf(LINK->ex + strlen(LINK->ex), "%.*s", (int)(i - 1), s);
-	LINK->desc->error = (unsigned)ne_strlong;
-}
-
-static void appendc(char ch, struct LOC_ne_uncompile *LINK)
-{
-	if (strlen(LINK->ex) < 255)
-		sprintf(LINK->ex + strlen(LINK->ex), "%c", ch);
-	else
-		LINK->desc->error = (unsigned)ne_strlong;
-}
-
-static void appenderrname(ne_nexrec *nex, struct LOC_ne_uncompile *LINK)
-{
-	char buf[256];
-	long i;
-	char STR1[256];
-
-	strcpy(buf, ne_errorkind_NAMES[nex->UU.err]);
-	i = strlen(buf) + 1;
-	buf[i - 1] = '\0';
-	strcpy_overlap(buf, buf + 3);
-	append(strlower(STR1, buf), LINK);
-}
-
-/* Local variables for uncompile: */
-struct LOC_uncompile
-{
-	struct LOC_ne_uncompile *LINK;
-	ne_nexrec *nex;
-} ;
-
-static void args(struct LOC_uncompile *LINK)
-{
-	long i1;
-	ne_nexrec *WITH;
-	long FORLIM;
-
-	WITH = LINK->nex;
-	if (WITH->nargs == 0)
-		return;
-	appendc('(', LINK->LINK);
-	FORLIM = WITH->nargs;
-	for (i1 = 1; i1 <= FORLIM; i1++) {
-		if (i1 > 1)
-			appendc(',', LINK->LINK);
-		uncompile(WITH->UU.U99.pvals[WITH->UU.i - 1], 0, LINK->LINK);
-	}
-	appendc(')', LINK->LINK);
-}
-
-static void func(char *name, struct LOC_uncompile *LINK)
-{
-	append(name, LINK->LINK);
-	args(LINK);
-}
-
-static void uncompile(ne_nexrec *nex_, int prec, struct LOC_ne_uncompile *LINK)
-{
-	struct LOC_uncompile V;
-	ne_nexrec *nex2;
-	long j;
-	ne_nexrec *WITH;
-	char STR1[256];
-	long FORLIM;
-
-	V.LINK = LINK;
-	V.nex = nex_;
-	WITH = V.nex;
-	LINK->lastop = (ne_opkind)WITH->op;
-	switch ((ne_opkind)WITH->op)
-	{
-
-		case ne_error:
-			append("error(", LINK);
-			appenderrname(V.nex, LINK);
-			appendc(')', LINK);
-			break;
-
-		case ne_ic:
-			if (LINK->desc->scaled)
-			{
-				append(realunit(STR1, (double)WITH->UU.i, LINK->desc->units), LINK);
-			}
-			else
-			{
-				sprintf(STR1, "%ld", WITH->UU.i);
-				append(STR1, LINK);
-			}
-			break;
-
-		case ne_rc:
-			if (LINK->desc->scaled)
-			{
-				append(realunit(STR1, WITH->UU.r, LINK->desc->units), LINK);}
-			else
-			{
-				sprintf(STR1, "%g", WITH->UU.r);
-				append(STR1, LINK);
-			}
-			break;
-
-		case ne_sc:
-			if (*WITH->UU.s == '\0')
-				append("''", LINK);
-			else {
-				LINK->flag = false;
-				FORLIM = strlen(WITH->UU.s);
-				for (j = 0; j < FORLIM; j++) {
-					if (WITH->UU.s[j] < ' ' || WITH->UU.s[j] > '~')
-					{
-						if (LINK->flag)
-							appendc('\'', LINK);
-						appendc('#', LINK);
-						sprintf(STR1, "%d", WITH->UU.s[j]);
-						append(STR1, LINK);
-						LINK->flag = false;
-					}
-					else
-					{
-						if (!LINK->flag)
-							appendc('\'', LINK);
-						appendc(WITH->UU.s[j], LINK);
-						if (WITH->UU.s[j] == '\'')
-							appendc('\'', LINK);
-						LINK->flag = true;
-					}
-				}
-				if (LINK->flag)
-					appendc('\'', LINK);
-			}
-			break;
-
-		case ne_ip:
-		case ne_rp:
-		case ne_sp:
-		case ne_rxp:
-			if (WITH->UU.U10.ips != NULL)
-				append(WITH->UU.U10.ips->s, LINK);
-			else
-				append("(var)", LINK);
-			break;
-
-		case ne_if:
-		case ne_rf:
-		case ne_sf:
-			if (WITH->UU.U10.ips != NULL)
-				append(WITH->UU.U15.fps->s, LINK);
-			else
-				append("(func)", LINK);
-			args(&V);
-			break;
-
-		case ne_itor:
-		case ne_rbool:
-		case ne_sbool:
-			uncompile(WITH->UU.U10.p1, prec, LINK);
-			break;
-
-		case ne_iarg:
-			sprintf(STR1, "i_arg(%ld)", WITH->UU.i);
-			append(STR1, LINK);
-			break;
-
-		case ne_rarg:
-			sprintf(STR1, "r_arg(%ld)", WITH->UU.i);
-			append(STR1, LINK);
-			break;
-
-		case ne_sarg:
-			sprintf(STR1, "s_arg(%ld)", WITH->UU.i);
-			append(STR1, LINK);
-			break;
-
-		case ne_ineg:
-		case ne_rneg:
-			if (neg_prec < prec)
-				appendc('(', LINK);
-			appendc('-', LINK);
-			uncompile(WITH->UU.U10.p1, (int)(neg_prec + 1), LINK);
-			if (neg_prec < prec)
-				appendc(')', LINK);
-			break;
-
-		case ne_not:
-			if (not_prec < prec)
-				appendc('(', LINK);
-			appendc('~', LINK);
-			uncompile(WITH->UU.U10.p1, (int)(not_prec + 1), LINK);
-			if (not_prec < prec)
-				appendc(')', LINK);
-			break;
-
-		case ne_lnot:
-			if (lnot_prec < prec)
-				appendc('(', LINK);
-			appendc('!', LINK);
-			uncompile(WITH->UU.U10.p1, (int)(lnot_prec + 1), LINK);
-			if (lnot_prec < prec)
-				appendc(')', LINK);
-			break;
-
-		case ne_round:
-			func("round", &V);
-			break;
-
-		case ne_trunc:
-			func("trunc", &V);
-			break;
-
-		case ne_ln:
-			func("ln", &V);
-			break;
-
-		case ne_exp:
-			func("exp", &V);
-			break;
-
-		case ne_iabs:
-		case ne_rabs:
-			func("abs", &V);
-			break;
-
-		case ne_sqrt:
-			func("sqrt", &V);
-			break;
-
-		case ne_sin:
-			func("sin", &V);
-			break;
-
-		case ne_cos:
-			func("cos", &V);
-			break;
-
-		case ne_tan:
-			func("tan", &V);
-			break;
-
-		case ne_arctan:
-			func("arctan", &V);
-			break;
-
-		default:
-			j = numopersyms;
-			while (j >= 1 && (ne_opkind)opers[j - 1].iop != (ne_opkind)WITH->op &&
-					(ne_opkind)opers[j - 1].rop != (ne_opkind)WITH->op &&
-					(ne_opkind)opers[j - 1].sop != (ne_opkind)WITH->op)
-				j--;
-			if (opers[j - 1].lprec < prec)
-				appendc('(', LINK);
-			if (opers[j - 1].lprec == opers[j - 1].rprec)
-				uncompile(WITH->UU.U10.p1, opers[j - 1].lprec, LINK);
-			else
-				uncompile(WITH->UU.U10.p1, opers[j - 1].lprec + 1, LINK);
-			LINK->ch = opers[j - 1].name;
-			nex2 = WITH->UU.U10.p2;
-			switch (LINK->ch)
-			{
-				case '\001':
-					if (LINK->desc->doubleeq)
-						append("!=", LINK);
-					else
-						append("<>", LINK);
-					break;
-
-				case '\002':
-					append("<=", LINK);
-					break;
-
-				case '\003':
-					append(">=", LINK);
-					break;
-
-				case '\004':
-					append("&&", LINK);
-					break;
-
-				case '\005':
-					append("||", LINK);
-					break;
-
-				case '\006':
-					append("<<", LINK);
-					break;
-
-				case '\007':
-					append(">>", LINK);
-					break;
-
-				case '\b':
-					append("!!", LINK);
-					break;
-
-				case '?':
-					appendc(LINK->ch, LINK);
-					uncompile(WITH->UU.U10.p2, 0, LINK);
-					appendc(':', LINK);
-					nex2 = WITH->UU.U10.p3;
-					break;
-
-				default:
-					if (LINK->ch == '=' && LINK->desc->doubleeq)
-						appendc(LINK->ch, LINK);
-					appendc(LINK->ch, LINK);
-					break;
-			}
-
-			if (opers[j - 1].lprec == opers[j - 1].rprec)
-				uncompile(nex2, opers[j - 1].lprec + 1, LINK);
-			else
-				uncompile(nex2, opers[j - 1].lprec, LINK);
-			if (opers[j - 1].lprec < prec)
-				appendc(')', LINK);
-			break;
-	}
-}
-
-void ne_uncompile(ne_nexrec *nex, char *ex_, ne_desc *desc_)
-{
-	struct LOC_ne_uncompile V;
-
-	V.ex = ex_;
-	V.desc = desc_;
-	V.desc->error = (unsigned)ne_noerror;
-	*V.ex = '\0';
-	if (nex == NULL)
-	{
-		append("(nil)", &V);
-		return;
-	}
-	uncompile(nex, 0, &V);
-	if (*V.desc->units != '\0' && (unsigned long)V.lastop < 32 &&
-			((1L << ((long)V.lastop)) & ((1L << ((long)ne_ic)) | (1L << ((long)ne_rc)))) != 0)
-		append(V.desc->units, &V);
-}
-
-
-#define framesize       4   /*for na_outeralloc*/
-
-static void evalargs(ne_nexrec *nex)
-{
-	long i;
-	char buf[256];
-	long FORLIM;
-
-	na_outeralloc((void* *)(&ne_argarray), nex->nargs * 8L, (long)framesize);
-	FORLIM = nex->nargs;
-	for (i = 0; i < FORLIM; i++)
-	{
-		if (nex->UU.U15.fp->nargs == 0)
-			ne_argarray[i].r = ne_reval(nex->UU.U99.pvals[i]);
-		else {
-			switch (nex->UU.U15.fp->UU.U99.ptypes[P_imin2(i + 1, (long)nex->UU.U15.fp->nargs) - 1])
-			{
-
-				case ne_integer:
-				case ne_boolean:
-					ne_argarray[i].U1.i1 = ne_ieval(nex->UU.U99.pvals[i]);
-					break;
-
-				case ne_real:
-					ne_argarray[i].r = ne_reval(nex->UU.U99.pvals[i]);
-					break;
-
-				case ne_string:
-					ne_seval(buf, nex->UU.U99.pvals[i]);
-					na_outeralloc((void* *)(&ne_argarray[i].U16.sp1), strlen(buf) + 1L, (long)framesize);
-					strcpy(ne_argarray[i].U16.sp1, buf);
-					break;
-
-				default:
-					break;
-			}
-		}
-	}
-}
-
-#undef framesize
-
-int ne_condeval(ne_nexrec *nex)
-{
-	int Result = -1;
-
-	TRY(try2);
-	Result = (ne_ieval(nex) != 0);
-	RECOVER(try2);
-	if (P_escapecode == ne_badescape)
-		return false;
-	else
-		_Escape(P_escapecode);
-	ENDTRY(try2);
-	return Result;
-}
-
-long ne_ieval(ne_nexrec *nex)
-{
-	long Result, i1;
-	na_quadword *saveargarr;
-	ne_nexrec *WITH;
-	char STR1[256], STR2[256];
-
-	WITH = nex;
-	switch ((ne_opkind)nex->op)
-	{
-		case ne_ic:
-			Result = WITH->UU.i;
-			break;
-
-		case ne_ip:
-			Result = *WITH->UU.U10.ip;
-			break;
-
-		case ne_if:
-			if (WITH->UU.U15.fp->subnex)
-			{
-				saveargarr = ne_argarray;
-				TRY(try3);
-				evalargs(nex);
-				switch ((int)types[(*WITH->UU.U15.fp->UU.nexp)->op])
-				{
-
-					case ne_integer:
-						Result = ne_ieval(*WITH->UU.U15.fp->UU.nexp);
-						break;
-
-					case ne_real:   /*in case of $range off$*/
-						Result = (long)floor(ne_reval(*WITH->UU.U15.fp->UU.nexp) + 0.5);
-						break;
-
-					default:
-						P_escapecode = -9;
-						goto _Ltry3;
-						break;
-				}
-				ne_argarray = saveargarr;
-				RECOVER2(try3,_Ltry3);
-				ne_argarray = saveargarr;
-				_Escape(P_escapecode);
-				ENDTRY(try3);
-			}
-			else
-			{
-				if (WITH->UU.U15.fp->UU.U5.ipr.link != NULL)
-					(*(void(*) (ne_nexrec *nex, long *res, void* _link)) WITH->UU.U15.fp->UU.U5.ipr.proc)(nex, &i1,
-							WITH->UU.U15.fp->UU.U5.ipr.link);
-				else
-					(*(void(*) (ne_nexrec *nex, long *res)) WITH->UU.U15.fp->UU.U5.ipr.proc)(nex, &i1);
-				Result = i1;
-			}
-			break;
-
-		case ne_iarg:
-			if (ne_argarray == NULL)
-				Result = 0;
-			else
-				Result = ne_argarray[WITH->UU.i - 1].U1.i1;
-			break;
-
-		case ne_iadd:
-			Result = ne_ieval(WITH->UU.U10.p1) + ne_ieval(WITH->UU.U10.p2);
-			break;
-
-		case ne_isub:
-			Result = ne_ieval(WITH->UU.U10.p1) - ne_ieval(WITH->UU.U10.p2);
-			break;
-
-		case ne_imul:
-			Result = ne_ieval(WITH->UU.U10.p1) * ne_ieval(WITH->UU.U10.p2);
-			break;
-
-		case ne_idiv:
-			Result = ne_ieval(WITH->UU.U10.p1) / ne_ieval(WITH->UU.U10.p2);
-			break;
-
-		case ne_ineg:
-			Result = -ne_ieval(WITH->UU.U10.p1);
-			break;
-
-		case ne_imod:
-			Result = ne_ieval(WITH->UU.U10.p1) % ne_ieval(WITH->UU.U10.p2);
-			break;
-
-		case ne_rbool:
-			TRY(try4);
-			Result = (ne_reval(WITH->UU.U10.p1) != 0);
-			RECOVER(try4);
-			if (P_escapecode != ne_badescape)
-				_Escape(P_escapecode);
-			Result = 0;
-			ENDTRY(try4);
-			break;
-
-		case ne_sbool:
-			TRY(try5);
-			Result = (*ne_seval(STR1, WITH->UU.U10.p1) != '\0');
-			RECOVER(try5);
-			if (P_escapecode != ne_badescape)
-				_Escape(P_escapecode);
-			Result = 0;
-			ENDTRY(try5);
-			break;
-
-		case ne_ieq:
-			Result = (ne_ieval(WITH->UU.U10.p1) == ne_ieval(WITH->UU.U10.p2));
-			break;
-
-		case ne_ine:
-			Result = (ne_ieval(WITH->UU.U10.p1) != ne_ieval(WITH->UU.U10.p2));
-			break;
-
-		case ne_ilt:
-			Result = (ne_ieval(WITH->UU.U10.p1) < ne_ieval(WITH->UU.U10.p2));
-			break;
-
-		case ne_ile:
-			Result = (ne_ieval(WITH->UU.U10.p1) <= ne_ieval(WITH->UU.U10.p2));
-			break;
-
-		case ne_igt:
-			Result = (ne_ieval(WITH->UU.U10.p1) > ne_ieval(WITH->UU.U10.p2));
-			break;
-
-		case ne_ige:
-			Result = (ne_ieval(WITH->UU.U10.p1) >= ne_ieval(WITH->UU.U10.p2));
-			break;
-
-		case ne_req:
-			Result = (ne_reval(WITH->UU.U10.p1) == ne_reval(WITH->UU.U10.p2));
-			break;
-
-		case ne_rne:
-			Result = (ne_reval(WITH->UU.U10.p1) != ne_reval(WITH->UU.U10.p2));
-			break;
-
-		case ne_rlt:
-			Result = (ne_reval(WITH->UU.U10.p1) < ne_reval(WITH->UU.U10.p2));
-			break;
-
-		case ne_rle:
-			Result = (ne_reval(WITH->UU.U10.p1) <= ne_reval(WITH->UU.U10.p2));
-			break;
-
-		case ne_rgt:
-			Result = (ne_reval(WITH->UU.U10.p1) > ne_reval(WITH->UU.U10.p2));
-			break;
-
-		case ne_rge:
-			Result = (ne_reval(WITH->UU.U10.p1) >= ne_reval(WITH->UU.U10.p2));
-			break;
-
-		case ne_seq:
-			Result = (strcmp(ne_seval(STR1, WITH->UU.U10.p1), ne_seval(STR2, WITH->UU.U10.p2)) == 0);
-			break;
-
-		case ne_sne:
-			Result = (strcmp(ne_seval(STR1, WITH->UU.U10.p1), ne_seval(STR2, WITH->UU.U10.p2)) != 0);
-			break;
-
-		case ne_slt:
-			Result = (strcmp(ne_seval(STR1, WITH->UU.U10.p1), ne_seval(STR2, WITH->UU.U10.p2)) < 0);
-			break;
-
-		case ne_sle:
-			Result = (strcmp(ne_seval(STR1, WITH->UU.U10.p1), ne_seval(STR2, WITH->UU.U10.p2)) <= 0);
-			break;
-
-		case ne_sgt:
-			Result = (strcmp(ne_seval(STR1, WITH->UU.U10.p1), ne_seval(STR2, WITH->UU.U10.p2)) > 0);
-			break;
-
-		case ne_sge:
-			Result = (strcmp(ne_seval(STR1, WITH->UU.U10.p1), ne_seval(STR2, WITH->UU.U10.p2)) >= 0);
-			break;
-
-		case ne_not:
-			Result = ~ne_ieval(WITH->UU.U10.p1);
-			break;
-
-		case ne_and:
-			Result = ne_ieval(WITH->UU.U10.p1) & ne_ieval(WITH->UU.U10.p2);
-			break;
-
-		case ne_or:
-			Result = ne_ieval(WITH->UU.U10.p1) | ne_ieval(WITH->UU.U10.p2);
-			break;
-
-		case ne_xor:
-			Result = ne_ieval(WITH->UU.U10.p1) ^ ne_ieval(WITH->UU.U10.p2);
-			break;
-
-		case ne_lsh:
-			Result = ne_ieval(WITH->UU.U10.p1) << ne_ieval(WITH->UU.U10.p2);
-			break;
-
-		case ne_rsh:
-			Result = ne_ieval(WITH->UU.U10.p1) >> ne_ieval(WITH->UU.U10.p2);
-			break;
-
-		case ne_lnot:
-			Result = !ne_condeval(WITH->UU.U10.p1);
-			break;
-
-		case ne_iand:
-			if (ne_condeval(WITH->UU.U10.p1))
-				Result = ne_ieval(WITH->UU.U10.p2);
-			else
-				Result = 0;
-			break;
-
-		case ne_ior:
-			TRY(try6);
-			i1 = ne_ieval(WITH->UU.U10.p1);
-			RECOVER(try6);
-			if (P_escapecode != ne_badescape)
-				_Escape(P_escapecode);
-			i1 = 0;
-			ENDTRY(try6);
-			if (i1 == 0)
-				Result = ne_ieval(WITH->UU.U10.p2);
-			else
-				Result = i1;
-			break;
-
-		case ne_icond:
-			if (ne_condeval(WITH->UU.U10.p1))
-				Result = ne_ieval(WITH->UU.U10.p2);
-			else
-				Result = ne_ieval(WITH->UU.U10.p3);
-			break;
-
-		case ne_round:
-			Result = (long)floor(ne_reval(WITH->UU.U10.p1) + 0.5);
-			break;
-
-		case ne_trunc:
-			Result = (long)ne_reval(WITH->UU.U10.p1);
-			break;
-
-		case ne_iabs:
-			Result = labs(ne_ieval(WITH->UU.U10.p1));
-			break;
-
-		default:
-			_Escape(-9);
-			break;
-	}
-	return Result;
-}
-
-
-double ne_reval(ne_nexrec *nex)
-{
-	double Result, r1;
-	na_quadword *saveargarr;
-	ne_nexrec *WITH;
-
-	WITH = nex;
-	switch ((ne_opkind)nex->op)
-	{
-
-		case ne_rc:
-			Result = WITH->UU.r;
-			break;
-
-		case ne_rp:
-			Result = *WITH->UU.U11.rp;
-			break;
-
-		case ne_rxp:
-			if (*WITH->UU.U11.rp == ne_badvalue)
-				_Escape(ne_badescape);
-			Result = *WITH->UU.U11.rp;
-			break;
-
-		case ne_rf:
-			if (WITH->UU.U15.fp->subnex)
-			{
-				saveargarr = ne_argarray;
-				TRY(try7);
-				evalargs(nex);
-				switch ((int)types[(*WITH->UU.U15.fp->UU.nexp)->op])
-				{
-
-					case ne_integer:
-						Result = ne_ieval(*WITH->UU.U15.fp->UU.nexp);
-						break;
-
-					case ne_real:   /*in case of $range off$*/
-						Result = ne_reval(*WITH->UU.U15.fp->UU.nexp);
-						break;
-
-					default:
-						P_escapecode = -9;
-						goto _Ltry7;
-						break;
-				}
-				ne_argarray = saveargarr;
-				RECOVER2(try7,_Ltry7);
-				ne_argarray = saveargarr;
-				_Escape(P_escapecode);
-				ENDTRY(try7);
-			} else
-			{
-				if (WITH->UU.U15.fp->UU.rpr.link != NULL)
-					(*(void(*) (ne_nexrec *nex, double *res, void* _link)) WITH->UU.U15.fp->UU.rpr.proc)(nex, &r1,
-						 WITH->UU.U15.fp->UU.rpr.link);
-				else
-					(*(void(*) (ne_nexrec *nex, double *res)) WITH->UU.U15.fp->UU.rpr.proc)(nex, &r1);
-				Result = r1;
-			}
-			break;
-
-		case ne_rarg:
-			if (ne_argarray == NULL)
-				Result = 0.0;
-			else
-				Result = ne_argarray[WITH->UU.i - 1].r;
-			break;
-
-		case ne_radd:
-			Result = ne_reval(WITH->UU.U10.p1) + ne_reval(WITH->UU.U10.p2);
-			break;
-
-		case ne_rsub:
-			Result = ne_reval(WITH->UU.U10.p1) - ne_reval(WITH->UU.U10.p2);
-			break;
-
-		case ne_rmul:
-			Result = ne_reval(WITH->UU.U10.p1) * ne_reval(WITH->UU.U10.p2);
-			break;
-
-		case ne_rdiv:
-			Result = ne_reval(WITH->UU.U10.p1) / ne_reval(WITH->UU.U10.p2);
-			break;
-
-		case ne_rneg:
-			Result = -ne_reval(WITH->UU.U10.p1);
-			break;
-
-		case ne_rpow:
-			Result = ma_ytox(ne_reval(WITH->UU.U10.p1), ne_reval(WITH->UU.U10.p2));
-			break;
-
-		case ne_itor:
-			Result = ne_ieval(WITH->UU.U10.p1);
-			break;
-
-		case ne_ln:
-			Result = log(ne_reval(WITH->UU.U10.p1));
-			break;
-
-		case ne_exp:
-			Result = exp(ne_reval(WITH->UU.U10.p1));
-			break;
-
-		case ne_rabs:
-			Result = fabs(ne_reval(WITH->UU.U10.p1));
-			break;
-
-		case ne_sqrt:
-			Result = sqrt(ne_reval(WITH->UU.U10.p1));
-			break;
-
-		case ne_sin:
-			Result = sin(ne_reval(WITH->UU.U10.p1));
-			break;
-
-		case ne_cos:
-			Result = cos(ne_reval(WITH->UU.U10.p1));
-			break;
-
-		case ne_tan:
-			Result = tan(ne_reval(WITH->UU.U10.p1));
-			break;
-
-		case ne_arctan:
-			Result = atan(ne_reval(WITH->UU.U10.p1));
-			break;
-
-		case ne_rand:
-			TRY(try8);
-			r1 = ne_reval(WITH->UU.U10.p1);
-			RECOVER(try8);
-			if (P_escapecode != ne_badescape)
-				_Escape(P_escapecode);
-			r1 = 0.0;
-			ENDTRY(try8);
-			if (r1 != 0)
-				Result = ne_reval(WITH->UU.U10.p2);
-			else
-				Result = 0.0;
-			break;
-
-		case ne_ror:
-			TRY(try9);
-			r1 = ne_reval(WITH->UU.U10.p1);
-			RECOVER(try9);
-			if (P_escapecode != ne_badescape)
-				_Escape(P_escapecode);
-			r1 = 0.0;
-			ENDTRY(try9);
-			if (r1 == 0)
-				Result = ne_reval(WITH->UU.U10.p2);
-			else
-				Result = r1;
-			break;
-
-		case ne_rxor:
-			TRY(try10);
-			Result = ne_reval(WITH->UU.U10.p1);
-			RECOVER(try10);
-			if (P_escapecode != ne_badescape)
-				_Escape(P_escapecode);
-			Result = ne_reval(WITH->UU.U10.p2);
-			ENDTRY(try10);
-			break;
-
-		case ne_rcond:
-			if (ne_condeval(WITH->UU.U10.p1))
-				Result = ne_reval(WITH->UU.U10.p2);
-			else
-				Result = ne_reval(WITH->UU.U10.p3);
-			break;
-
-		default:
-			Result  = 0;
-			_Escape(-9);
-			break;
-	}
-	return Result;
-}
-
-
-char *ne_seval(char *Result, ne_nexrec *nex)
-{
-	char s1[256];
-	na_quadword *saveargarr;
-	ne_nexrec *WITH;
-	char STR1[256], STR2[256];
-
-	WITH = nex;
-	switch ((ne_opkind)nex->op)
-	{
-
-		case ne_sc:
-			strcpy(Result, WITH->UU.s);
-			break;
-
-		case ne_sp:
-			strcpy(Result, *WITH->UU.U12.sp);
-			break;
-
-		case ne_sf:
-			if (WITH->UU.U15.fp->subnex)
-			{
-				saveargarr = ne_argarray;
-				TRY(try11);
-				evalargs(nex);
-				ne_seval(Result, *WITH->UU.U15.fp->UU.nexp);
-				ne_argarray = saveargarr;
-				RECOVER(try11);
-				ne_argarray = saveargarr;	_Escape(P_escapecode);
-				ENDTRY(try11);
-			}
-			else
-			{
-				if (WITH->UU.U15.fp->UU.spr.link != NULL)
-					(*(void(*) (ne_nexrec *nex, char *res, void* _link)) WITH->UU.U15.fp->UU.spr.proc)(nex, s1, WITH->UU.U15.fp->UU.spr.link);
-				else
-					(*(void(*) (ne_nexrec *nex, char *res))
-					 WITH->UU.U15.fp->UU.spr.proc)(nex, s1);
-				strcpy(Result, s1);
-			}
-			break;
-
-		case ne_sarg:
-			if (ne_argarray == NULL)
-				strcpy(Result, "");
-			else
-				strcpy(Result, ne_argarray[WITH->UU.i - 1].U16.sp1);
-			break;
-
-		case ne_sadd:
-			sprintf(Result, "%s%s",
-					ne_seval(STR1, WITH->UU.U10.p1), ne_seval(STR2, WITH->UU.U10.p2));
-			break;
-
-		case ne_sand:
-			TRY(try12);
-			ne_seval(s1, WITH->UU.U10.p1);
-			RECOVER(try12);
-			if (P_escapecode != ne_badescape)
-				_Escape(P_escapecode);
-			*s1 = '\0';
-			ENDTRY(try12);
-			if (*s1 != '\0')
-				ne_seval(Result, WITH->UU.U10.p2);
-			else
-				strcpy(Result, "");
-			break;
-
-		case ne_sor:
-			TRY(try13);
-			ne_seval(s1, WITH->UU.U10.p1);
-			RECOVER(try13);
-			if (P_escapecode != ne_badescape)
-				_Escape(P_escapecode);
-			*s1 = '\0';
-			ENDTRY(try13);
-			if (*s1 == '\0')
-				ne_seval(Result, WITH->UU.U10.p2);
-			else
-				strcpy(Result, s1);
-			break;
-
-		case ne_scond:
-			if (ne_condeval(WITH->UU.U10.p1))
-				ne_seval(Result, WITH->UU.U10.p2);
-			else
-				ne_seval(Result, WITH->UU.U10.p3);
-			break;
-
-		default:
-			_Escape(-9);
-			break;
-	}
-	return Result;
-}
-
-ne_datatype ne_exprtype(ne_nexrec *nex)
-{
-	if (nex == NULL)
-		return ne_notype;
-	else
-		return (types[nex->op]);
-}
-
-void ne_evaluate(ne_nexrec *nex, ne_nexrec *res)
-{
-	char STR1[256];
-
-	TRY(try14);
-	switch ((int)types[nex->op])
-	{
-		case ne_notype:
-			*res = *nex;
-			break;
-
-		case ne_integer:
-			res->op = (unsigned)ne_ic;
-			res->UU.i = ne_ieval(nex);
-			break;
-
-		case ne_real:
-			res->op = (unsigned)ne_rc;
-			res->UU.r = ne_reval(nex);
-			break;
-
-		case ne_string:
-			res->op = (unsigned)ne_sc;
-			res->UU.s = (char *)strdup(ne_seval(STR1, nex));
-			break;
-	}
-	RECOVER(try14);
-
-	if (P_escapecode == -20)
-		_Escape(P_escapecode);
-	res->op = (unsigned)ne_error;
-
-	switch (P_escapecode)
-	{
-
-		case -3:
-			res->UU.err = (unsigned)ne_undef;
-			break;
-
-		case -5:
-			res->UU.err = (unsigned)ne_divzero;
-			break;
-
-		case -7:
-			res->UU.err = (unsigned)ne_underflow;
-			break;
-
-		case ne_badescape:
-			res->UU.err = (unsigned)ne_badval;
-			break;
-
-		default:
-			res->UU.err = (unsigned)ne_overflow;
-			break;
-	}
-	ENDTRY(try14);
-}
-
-static void faileval(ne_nexrec *nex, ne_desc *desc, long esc)
-{
-	desc->error = (unsigned)ne_noerror;
-	if (nex == NULL || (ne_opkind)nex->op != ne_error)
-		_Escape((int)esc);
-	desc->error = (unsigned)((ne_errorkind)nex->UU.err);
-	switch ((ne_errorkind)nex->UU.err) {
-
-		case ne_underflow:
-			_Escape(-7);
-			break;
-
-		case ne_divzero:
-			_Escape(-5);
-			break;
-
-		case ne_strlong:
-			_Escape(-8);
-			break;
-
-		default:
-			_Escape((int)esc);
-			break;
-	}
-}
-
-
-long ne_ievaluate(ne_nexrec *nex, ne_desc *desc)
-{
-	if (integerp(nex))
-		return (ne_ieval(nex));
-	if (realp(nex))
-		return ((long)floor(ne_reval(nex) + 0.5));
-	faileval(nex, desc, -4L);
-
-  return 0L;  /* should never happen */
-}
-
-
-double ne_revaluate(ne_nexrec *nex, ne_desc *desc)
-{
-	if (realp(nex))
-		return (ne_reval(nex));
-	if (integerp(nex))
-		return (ne_ieval(nex));
-	faileval(nex, desc, -6L);
-
-  return 0.0; /* should never happen */
-}
-
-char *ne_sevaluate(char *Result, ne_nexrec *nex, ne_desc *desc)
-{
-	if (stringp(nex))
-		return (ne_seval(Result, nex));
-	faileval(nex, desc, -8L);
-	return Result;
-}
-
-long ne_ievalexpr(char *ex, ne_desc *desc)
-{
-	long Result;
-	ne_nexrec *nex;
-	long esc;
-
-	ne_compile(ex, &nex, desc);
-	TRY(try15);
-	Result = ne_ievaluate(nex, desc);
-	ne_dispose(&nex);
-	RECOVER(try15);
-	esc = P_escapecode;
-	ne_dispose(&nex);
-	_Escape((int)esc);
-	ENDTRY(try15);
-	return Result;
-}
-
-double ne_revalexpr(char *ex, ne_desc *desc)
-{
-	double Result;
-	ne_nexrec *nex;
-	long esc;
-
-	ne_compile(ex, &nex, desc);
-	TRY(try16);
-	Result = ne_revaluate(nex, desc);
-	ne_dispose(&nex);
-	RECOVER(try16);
-	esc = P_escapecode;
-	ne_dispose(&nex);
-	_Escape((int)esc);
-	ENDTRY(try16);
-	return Result;
-}
-
-char *ne_sevalexpr(char *Result, char *ex, ne_desc *desc)
-{
-	ne_nexrec *nex;
-	long esc;
-
-	ne_compile(ex, &nex, desc);
-	TRY(try17);
-	ne_sevaluate(Result, nex, desc);
-	ne_dispose(&nex);
-	RECOVER(try17);
-	esc = P_escapecode;
-	ne_dispose(&nex);
-	_Escape((int)esc);
-	ENDTRY(try17);
-
-	return Result;
-}
-
-
-void ne_makeintconst(strlist_t *sym, long i)
-{
-	sym->kind = ne_kind_intconst;
-	sym->value = (na_long)i;
-}
-
-void ne_makesrealconst(strlist_t *sym, double r)
-{
-	sym->kind = ne_kind_srealconst;
-	sym->value = na_rtosr(r);
-}
-
-void ne_makerealconst(strlist_t *sym, double r)
-{
-	double *rp;
-
-	sym->kind = ne_kind_realconst;
-	rp = (double *)Malloc(sizeof(double));
-	*rp = r;
-	sym->value = (void*)rp;
-}
-
-
-void ne_makestrconst(strlist_t *sym, char *s)
-{
-	sym->kind = ne_kind_strconst;
-	*(char **)((char **)(&sym->value)) = (char *)strdup(s);
-}
-
-void ne_makeintvar(strlist_t *sym, long *i)
-{
-	sym->kind = ne_kind_intptr;
-	sym->value = (void*)i;
-}
-
-void ne_makerealvar(strlist_t *sym, double *r)
-{
-	sym->kind = ne_kind_realptr;
-	sym->value = (void*)r;
-}
-
-void ne_makerealxvar(strlist_t *sym, double *r)
-{
-	sym->kind = ne_kind_realxptr;
-	sym->value = (void*)r;
-}
-
-void ne_makestrvar(strlist_t *sym, char *s)
-{
-	sym->kind = ne_kind_strvalue;
-	sym->value = (void*)s;
-}
-
-void ne_makestrptrvar(strlist_t *sym, char **sp)
-{
-	sym->kind = ne_kind_strptr;
-	sym->value = (void*)sp;
-}
-
-static void setupfunc(strlist_t *sym, ne_functionrec **fp, long nargs, ne_datatype *args)
-{
-	long i;
-
-	*fp = (ne_functionrec *)Malloc(sizeof(ne_functionrec) + nargs * 2);
-	(*fp)->nargs = nargs;
-	for (i = 0; i < nargs; i++)
-		(*fp)->UU.U99.ptypes[i] = args[i];
-	(*fp)->static_ = false;
-	(*fp)->minargs = nargs;
-	(*fp)->maxargs = nargs;
-	sym->value = (void*)(*fp);
-}
-
-void ne_makeintmfunc(strlist_t *sym, long nargs, ne_datatype *args, _PROCEDURE pr)
-{
-	ne_functionrec *fp;
-
-	sym->kind = ne_kind_intfunc;
-	setupfunc(sym, &fp, nargs, args);
-	fp->subnex = false;
-	fp->UU.U5.ipr = pr;
-}
-
-void ne_makerealmfunc(strlist_t *sym, long nargs, ne_datatype *args, _PROCEDURE pr)
-{
-	ne_functionrec *fp;
-
-	sym->kind = ne_kind_realfunc;
-	setupfunc(sym, &fp, nargs, args);
-	fp->subnex = false;
-	fp->UU.rpr = pr;
-}
-
-void ne_makestrmfunc(strlist_t *sym, long nargs, ne_datatype *args, _PROCEDURE pr)
-{
-	ne_functionrec *fp;
-
-	sym->kind = ne_kind_strfunc;
-	setupfunc(sym, &fp, nargs, args);
-	fp->subnex = false;
-	fp->UU.spr = pr;
-}
-
-
-void ne_makeintfunc(strlist_t *sym, ne_datatype t1, ne_datatype t2, ne_datatype t3, _PROCEDURE pr)
-{
-	ne_datatype args[3];
-
-	args[0] = t1;
-	args[1] = t2;
-	args[2] = t3;
-	ne_makeintmfunc(sym, (long)((t1 != ne_notype) + (t2 != ne_notype) + (t3 != ne_notype)), args, pr);
-}
-
-void ne_makerealfunc(strlist_t *sym, ne_datatype t1, ne_datatype t2, ne_datatype t3, _PROCEDURE pr)
-{
-	ne_datatype args[3];
-
-	args[0] = t1;
-	args[1] = t2;
-	args[2] = t3;
-	ne_makerealmfunc(sym, (long)((t1 != ne_notype) + (t2 != ne_notype) + (t3 != ne_notype)), args, pr);
-}
-
-void ne_makestrfunc(strlist_t *sym, ne_datatype t1, ne_datatype t2, ne_datatype t3, _PROCEDURE pr)
-{
-	ne_datatype args[3];
-
-	args[0] = t1;
-	args[1] = t2;
-	args[2] = t3;
-	ne_makestrmfunc(sym, (long)((t1 != ne_notype) + (t2 != ne_notype) + (t3 != ne_notype)), args, pr);
-}
-
-void ne_makeintsfunc(strlist_t *sym, long nargs, ne_datatype *args, ne_nexrec **nex)
-{
-	ne_functionrec *fp;
-
-	sym->kind = ne_kind_intfunc;
-	setupfunc(sym, &fp, nargs, args);
-	fp->subnex = true;
-	fp->UU.nexp = nex;
-}
-
-void ne_makerealsfunc(strlist_t *sym, long nargs, ne_datatype *args, ne_nexrec **nex)
-{
-	ne_functionrec *fp;
-
-	sym->kind = ne_kind_realfunc;
-	setupfunc(sym, &fp, nargs, args);
-	fp->subnex = true;
-	fp->UU.nexp = nex;
-}
-
-void ne_makestrsfunc(strlist_t *sym, long nargs, ne_datatype *args, ne_nexrec **nex)
-{
-	ne_functionrec *fp;
-
-	sym->kind = ne_kind_strfunc;
-	setupfunc(sym, &fp, nargs, args);
-	fp->subnex = true;
-	fp->UU.nexp = nex;
-}
-
-void ne_makeintarg(strlist_t *sym, long i)
-{
-	sym->kind = ne_kind_intarg;
-	sym->value = (na_long)i;
-}
-
-void ne_makerealarg(strlist_t *sym, long i)
-{
-	sym->kind = ne_kind_realarg;
-	sym->value = (na_long)i;
-}
-
-void ne_makestrarg(strlist_t *sym, long i)
-{
-	sym->kind = ne_kind_strarg;
-	sym->value = (na_long)i;
-}
-
-void ne_setminargs(strlist_t *sym, long minargs)
-{
-	ne_functionrec *fp;
-
-	fp = (ne_functionrec *)sym->value;
-	fp->minargs = P_imin2((long)fp->nargs, minargs);
-}
-
-void ne_setmaxargs(strlist_t *sym, long maxargs)
-{
-	ne_functionrec *fp;
-
-	fp = (ne_functionrec *)sym->value;
-	fp->maxargs = P_imin2(P_imax2((long)fp->nargs, maxargs), (long)ne_maxargs);
-}
-
-void ne_makestaticfunc(strlist_t *sym)
-{
-	ne_functionrec *fp;
-
-	fp = (ne_functionrec *)sym->value;
-	fp->static_ = true;
-}
-
-void ne_disposesym(strlist_t *sym)
-{
-	double *rp;
-	ne_functionrec *fp;
-
-	switch (sym->kind)
-	{
-
-		case ne_kind_realconst:
-			rp = (double *)sym->value;
-			Free(rp);
-			break;
-
-		case ne_kind_intfunc:
-		case ne_kind_realfunc:
-		case ne_kind_strfunc:
-			fp = (ne_functionrec *)sym->value;
-			Free(fp);
-			break;
-	}
-	sym->kind = '\0';
-	sym->value = (na_long)0;
-}
-
-void ne_disposesymtab(strlist_t **symtab)
-{
-	strlist_t *l1;
-
-	l1 = *symtab;
-	while (l1 != NULL)
-	{
-		ne_disposesym(l1);
-		l1 = l1->next;
-	}
-	strlist_empty(symtab);
-}
-
-/* End. */