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_MUD_H

/* MUD version */
extern char version[];


/* how an object is stored. just a vector of attributes */
typedef struct {
  unsigned ocnt;                /* attribute count */
  char **oap;                   /* list of object attributes */
} Obj;



typedef void *mall_t;



/* error codes */
#define UERR_NONE       0
#define UERR_FATAL      1       /* interpreter barf */
#define UERR_USER       2       /* user error */
#define UERR_TYPE       3       /* type mismatch */
#define UERR_ZDIV       4       /* division by zero */
#define UERR_BADOID     5       /* illegal object ID */
#define UERR_BADLST     6       /* bad list */
#define UERR_ILLASGN    7       /* illegal assignment */
#define UERR_NOATTR     8       /* no such attribute */
#define UERR_NOFUNC     9       /* no such function */
#define UERR_SYNTAX     10      /* syntax error */
#define UERR_PERM       11      /* permission denied */
#define UERR_ARGCNT     12      /* too many parameters */
#define UERR_BADPARM    13      /* illegal parameters */
#define UERR_NOMATCH    14      /* no match */

/* error code strings - (from (errors.c') */
extern char *mud_errtxt (int no);



/* MUD-server state access functions (from 'mud.c') */
extern char *mud_getname (void);
extern int cron_quantum;


/* LOW-level object manipulation functions (from 'obj.c') */
extern char *objattr (Obj * obj, char *attr, int *slot);
extern Obj *objnew (void);
extern void objfree (Obj * obj);
extern int objsetattr (Obj * o, char *aty, char *att, char *ada);
extern int objunsetattr (Obj * obj, char *attr);
extern int objstuffattr (Obj * o, char *data, int len);
extern char *attdata (char *v);
extern int attistype (char *v, char *vt);
extern int attname (char *a, char *aname);

/* memory allocation stuff (from 'alloc.c') */
extern void tmp_sync (void);
extern mall_t tmpalloc (size_t siz);
extern char *tmpstr (char *s);
extern void deferfree (mall_t p);

/*
utility object/attribute manipulation functions (from 'objutil.c')
typically these are more useful than the lower-level stuff above
for writing user-applications and commands.
*/
extern char *ut_getatt (char *onam, int flg, char *typ, ...);
extern int ut_getnum (char *ob, char *att, int *ret);
extern int ut_setnum (char *who, char *ob, char *att, int val);
extern int ut_delocaliz (char *o1);
extern int ut_isgoodid (char *v);
extern int ut_isobjown (char *who, char *what);
extern int ut_listadd (char *who, char *onam, char *anam, char *item);
extern int ut_listdel (char *who, char *onam, char *anam, char *item);
extern int ut_objnew (char *who, char *rbuf);
extern char *ut_name (char *ob);        /* object's location */
extern char *ut_loc (char *ob); /* object's name */
extern char *ut_dropto (char *what, char *where, char *hm);     /* return room or dropto */
extern int ut_home (char *obj, char *dest);     /* object's home */
extern void ut_roombcast (char *where, char *notme, ...);
extern int ut_setpass (char *obj, char *pass);
extern int ut_unset (char *who, char *onam, char *anam);
extern int ut_set (char *who, char *onam, char *typ, char *anam, char *val);
extern int ut_flagged (char *who, char *flag);
extern int ut_listchk (char *onam, char *anam, char *item);
#ifdef COMBAT
extern int ut_home_player (char *aswho, char *goob, char *where);
#endif

/* attribute functions (from 'vars.c') */
extern int var_ispublic (char *vn, char *who, char *aswho, char *what);
extern char *var_namatch (char *nam);
extern void fndvnam (char *vt, char *buf, int siz);
extern int fndtyp (char *vt);
extern int var_set_internal (char *who, char *aswho, char *ob,
  char *typp, char *atpp, char *vapp, int vbose);
extern int var_unset_internal (char *who, char *aswho, char *ob, char *atpp,
  int vbose);

/* cache access/update functions (from 'cache.c') */
extern int cache_init (void);
extern int cache_sync (void);
extern Obj *cache_get (char *nam);
extern int cache_put (Obj * obj, char *nam);
extern int cache_check (char *nam);
extern void cache_reset (void);
extern int cache_del (char *nam, int flg);

#include "sbuf.h"
/* list manipulation functions (from 'list.c') */
extern char *lstadd (char *l, char *nam, int *lp);
extern char *lstdel (char *l, char *nam, int *lp);
extern char *lstnext (char *l, char *buf, int bs);
extern char *lstnextsbuf (char *l, Sbuf * sb);
extern int lstlook (char *l, char *nam);
extern int lstcnt (char *l);


/* OIF functions (from 'DB/oif.c') */
extern Obj *oiffromFILE (FILE * f, char *nbuf);
extern int oiftoFILE (Obj * o, FILE * f, char *nam);
extern Obj *oiffromSTRING (char *string, char *nbuf);
extern int oiftoSTRING (Obj * o, char *buf, char *nam, int len);
extern int oif_objsiz (Obj * o, char *n);


#ifdef  COMPRESS_OIF
extern void comp_on (int onoff);
extern void comp_init ();
#endif

/* OIF functions (from 'misc2.c') */
extern void oiftowho (Obj * o, char *who, char *nam);

/* DBM-based db routines (from 'DB/dbmchunk.c') */
#ifdef  DB_DBMFILE
extern int cmd__dddbconfig (int argc, char **argv, char *who, char *aswho);     /* in dbmconf.c */
extern int dddb_backup (char *out);
extern int dddb_check (char *nam);
extern int dddb_close (void);
extern int dddb_del (char *nam, int flg);
extern Obj *dddb_get (char *nam);
extern int dddb_init (void);
extern int dddb_initted (void);
extern int dddb_put (Obj * obj, char *nam);
extern int dddb_setbsiz (int nbsiz);
extern int dddb_setfile (char *fil);
extern int dddb_travend (void);
extern int dddb_traverse (char *obuf);
extern int dddb_travstart (void);
#endif

/* GDBM-based routines (from 'DB/gdbmchunk.c') */
#ifdef DB_GDBMFILE
extern int cmd__dgdbconfig (int argc, char **argv, char *who, char *aswho);     /* in gdbmconf.c */
extern int dgdb_backup (char *out);
extern int dgdb_check (char *nam);
extern int dgdb_close (void);
extern int dgdb_del (char *nam, int flg);
extern Obj *dgdb_get (char *nam);
extern int dgdb_init (void);
extern int dgdb_initted (void);
extern int dgdb_put (Obj * obj, char *nam);
extern int dgdb_setfile (char *fil);
extern int dgdb_travend (void);
extern int dgdb_traverse (char *obuf);
extern int dgdb_travstart (void);
#endif

/* hashed directory routines (from 'DB/hashdir.c') */
#ifdef  DB_DIRHASH
extern int cmd__dhdbconfig (int argc, char *argv[], char *who, char *aswho);
extern int dhdb_backup (char *out);
extern int dhdb_check (char *nam);
extern int dhdb_close (void);
extern int dhdb_del (char *nam, int flg);
extern Obj *dhdb_get (char *nam);
extern int dhdb_init (void);
extern int dhdb_initted (void);
extern int dhdb_put (Obj * obj, char *nam);
extern int dhdb_sethpath (char *newpath);
extern int dhdb_sethsiz (int newsiz);
extern int dhdb_travend (void);
extern int dhdb_traverse (char *ob);
extern int dhdb_travstart (void);
#endif


/* "lookat" code (from 'do_look.c') */
extern int do_examine (char *who, char *aswho, char *ob);
extern void lookat (char *who, char *thing, int flg);
extern int say_attribute (char *who, char *ob, char *att, char *title,
  int showoid);


/* boolean code (from 'bool.c') */
extern int bool_eval (char *who, char *where, char *s, int check);
extern int bool_locked (char *who, char *what, char *where, char *lockvar, int deflt);  /* evaluate boolean lock */
extern int bool_syntax (char *who, char *exp);  /* check a lock's syntax */
extern int bool_rewrite (char *who, char *s, Sbuf * out);

/* output to a player through the network layer (in 'net.c') */
extern int io_init (void);
extern void io_sync (void);
extern void say (char *who, ...);
extern void io_logoff (char *who);
extern void io_rstnxtwho (void);    /* reset WHO list traverse */
extern char *io_nxtwho (time_t * timp); /* WHO list traverse */

/* from login.c */
extern void welcome (char *who);        /* called by I/O code during login */
extern void goodbye (char *w);  /* called by I/O code during hangup */
extern int login (char *lp, char *whobuf);      /* called by I/O code during login */
extern int newlogin (char *line, char *whobuf);

/* parser support (in 'U/uinterp.y') */
extern void parser_setinput (char *s);
extern int parser_compile (char *who);
extern int parser_run (char *who, char *aswho, int ac, char *av[]);
extern void eval_cmd_returnint (int val);
extern void eval_cmd_returnstr (char *val);
extern void eval_cmd_returnoid (char *val);


/* runtime support.  (in 'run.c') */
extern char *run_actor (void);      /* object ID of player running */
extern int run_level (void);        /* recursion depth */
extern int add_run_level (void);    /* increase recursion depth */
extern void run_setactor (char *s);
extern int run (char *who, char *aswho, char *s, int argc, char *argv[],
  int real_call);
extern int run_tokenize (char *bp, char **av, int avsiz, char *tobuf,
  size_t tobsiz);
extern int enargv (char *bp, char **av, int avsiz, char buf[], int bsiz,
  char **retp, char *who, char *aswho, int cac, char *cav[]);
extern int run_boot (char *l);
extern int vresolve (char *nam, char *who, char *aswho, int ac, char *av[],
  char **bp, size_t * lp);


/* activation of ofail/fail/ etc */
#define ACTIV_BCAST     0       /* if found, send to whole room */
#define ACTIV_PONLY     1       /* if found, send tO who only */
#define ACTIV_ECAST     2       /* if found, send to room, not player */
int activate (int flg, char *who, char *what, char *where, char *actvar,
  int argc, char *argv[]);


/* sending objects home (or limbo) */
#define CONTENTS_HOME   1       /* send contents of object to their homes  */
#define DEFAULT_LIMBO   2       /* send object to limbo if home = location */
/* This is static in CMD/destroy.c, and not referenced anywhere else? -Devin */
/* extern       int             home_object(); */


/* misc utility functions */
extern void log_printf (char *, ...);
extern void logf_close (void);
extern int logf_open (char *f);
extern void fatal (char *first, ...);
extern void rot_init(char *key);
extern void rot_encode(char *s1, char *s2);
extern void rot_decode(char *s1, char *s2);
extern int get_random (int num);
extern unsigned int objid_hash (char *oid, int hw);
extern int say_file(char *who, char *nam);              /* dump a file to the player */
extern char *itoa (int num, char *rbuf, int base);      /* int to ascii */
extern char *itoa (int num, char *rbuf, int base);
extern void plogf (char *fmt, ...);


/*
  This remainder of this file contains all prototypes that were not defined
 */

/* cron.c */
int cron_run (time_t now);

/* do_go.c */
int player_go (int argc, char *argv[], char *who, char *from, char *to);


/* match.c */
int matchplayers (char *who, char *what, char *where, int flg, char *dest);
int matchinv (char *who, char *what, int matchu, int flg, char *dest);
int matchstr (char *s1, char *s2, int sem);
int matchlocal (char *who, char *what, char *where, int flg, char *dest);
int matchargvexit (char *where, char *av[], int ac, char *dest);
int matchloggedinplayers (char *what, char *dest);
int matchwear (char *who, char *what, int flg, char *dest);
int matchexit (char *who, char *what, char *where, int flg, char *dest);
int matchobjects (char *who, char *what, char *where, int flg, char *dest);


/* net.c */
int io_loop (void);

/* xact.c */
void xact_in (SOCKET fd);
int xact_sendplayer (char *p, char *src, char *dest);
void xact_tinylink (char *who);
int xact_addlink (char *to, char *from, char *who);

/* xmit.c */
int xmit_def_mudent (char *name, char *host, char *symhost, char *rempw,
  char *locpw, char *port, char *plyport, char *timot);
int xmit_def_knownmud (char *mud);
int xmit_okay_remote (char *name);
int xc_initfd (SOCKET fd);
int xc_write (char *, ...);
void xc_close (void);
int xc_flush (void);
int set_remmud (char *nam);
int xc_open (char *mud);
int xmit_greet (void);
int check_rempwd (char *pwd);


#define _INCL_MUD_H
#endif