untermud/DOC/
untermud/DOC/U/
untermud/DOC/U/U-examples/
untermud/DOC/internals/
untermud/DOC/wizard/
untermud/MISC/
untermud/MISC/dbchk/
untermud/RWHO/
untermud/RWHO/rwhod/
#ifndef _INCL_U_H

/*
It is inevitable that someone will complain that having structure
elements named such things as n->rv.t or n->r->rv.t is cryptic and
is hard to read. The author actually finds such code fairly easy
to read, and the compiler has no problems with it either, therefore
the author advises the complainer to simply Deal With It.
*/
typedef struct _n {
  struct _n *l;
  struct _n *r;
  struct {                      /* this could be a union, but.. */
    int t;                      /* value of node */
    char *cv;                   /* char pointer value */
    int iv;                     /* integral value */
  } rv, nv;                     /* nv:node, rv:return stack */
} Nod;

#define NNULL   ((Nod *)0)

/* builtin intrinsic table */
typedef struct {
  char *nam;
  int argc;
  int flgs;
  int (*func) ();
} Bltin;
extern Bltin *u_bltlookup (char *s);

#define BLT_NOFLGS  00
#define BLT_WIZONLY 01
#define BLT_FIXARG  02

extern int eval_castbool(Nod *n);
extern int eval_castint(Nod *n);
extern char *eval_caststr(Nod *n);
extern void eval_adopt(Nod *n1, Nod *n2, int lrh);
extern int eval_cmd_returnedtrue(void);

#define _INCL_U_H
#endif