#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;



/* some machines have malloc use void pointers. bloody standards puke */
#ifdef	MALL_IS_VOID
typedef	void	*mall_t;
#else
typedef	char	*mall_t;
#endif

/* forward decl malloc */
extern	mall_t	malloc();
extern	mall_t	realloc();


#ifdef	SIG_IS_VOID
typedef	void	(*sig_t)();
#else
typedef	int	(*sig_t)();
#endif



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


/* LOW-level object manipulation functions (from 'obj.c') */
extern	char		*objattr();
extern	Obj		*objnew();
extern	void		objfree();
extern	int		objsetattr();
extern	int		objunsetattr();
extern	int		objstuffattr();
extern	char		*attdata();
extern	int		attistype();

/* memory allocation stuff (from 'alloc.c') */
extern	void		tmp_sync();
extern	mall_t		tmpalloc();
extern	void		deferfree();

/* system in-memory macro table stuff (from 'sym.c') */
extern	void		syminit();
extern	int		symdef();
extern	char		*symlook();
extern	int		symundef();

/*
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	int		att_objcmp();
extern	int		att_isgoodobjid();
extern	char		*ut_getatt();
extern	int		ut_iswiz();
extern	int		ut_isplayer();
extern	int		ut_delocaliz();
extern	int		ut_isgoodid();
extern	int		ut_isobjown();
extern	int		ut_listadd();
extern	int		ut_listdel();
extern	void		ut_lookat();
extern	int		ut_objcmp();
extern	int		ut_objnew();
extern	char		*ut_name();		/* object's location */
extern	char		*ut_loc();		/* object's name */
extern	char		*ut_dropto();		/* return room or dropto */
extern	int		ut_home();		/* object's home */
extern	void		ut_roombcast();
extern	int		ut_setpass();
extern	int		att_set();
extern	int		var_ispriv();		/* from 'vars.c' */


/* cache access/update functions (from 'cache.c') */
extern	int		cache_init();
extern	int		cache_sync();
extern	Obj		*cache_get();
extern	int		cache_put();
extern	int		cache_check();
extern	void		cache_reset();


/* list manipulation functions (from 'list.c') */
extern	char		*lstadd();
extern	char		*lstdel();
extern	char		*lstmerge();
extern	char		*lstnext();
extern	int		lstlook();
extern	int		lstcnt();


/* OIF functions (from 'oif.c') */
extern	Obj		*oiffromFILE();
extern	int		oiftoFILE();
extern	Obj		*oiffromSTRING();
extern	int		oiftoSTRING();
extern	int		oif_objsiz();
extern	void		oiftowho();


/* DBM-based db routines (from 'DB/dbmchunk.c') */
#ifdef	DB_DBMFILE
extern	int		cmd__dddbconfig();
extern	int		dddb_backup();
extern	int		dddb_check();
extern	int		dddb_close();
extern	int		dddb_del();
extern	Obj		*dddb_get();
extern	int		dddb_init();
extern	int		dddb_initted();
extern	int		dddb_put();
extern	int		dddb_setbsiz();
extern	int		dddb_setfile();
extern	int		dddb_travend();
extern	int		dddb_traverse();
extern	int		dddb_travstart();
#endif

/* GDBM-based routines (from 'DB/gdbmchunk.c') */
#ifdef DB_GDBMFILE
extern	int		cmd__dgdbconfig();
extern	int		dgdb_backup();
extern	int		dgdb_check();
extern	int		dgdb_close();
extern	int		dgdb_del();
extern	Obj		*dgdb_get();
extern	int		dgdb_init();
extern	int		dgdb_initted();
extern	int		dgdb_put();
extern	int		dgdb_setfile();
extern	int		dgdb_travend();
extern	int		dgdb_traverse();
extern	int		dgdb_travstart();
#endif

/* hashed directory routines (from 'DB/hashdir.c') */
#ifdef	DB_DIRHASH
extern	int		cmd__dhdbconfig();
extern	int		dhdb_backup();
extern	int		dhdb_check();
extern	int		dhdb_close();
extern	int		dhdb_del();
extern	Obj		*dhdb_get();
extern	int		dhdb_init();
extern	int		dhdb_initted();
extern	int		dhdb_put();
extern	int		dhdb_sethpath();
extern	int		dhdb_sethsiz();
extern	int		dhdb_travend();
extern	int		dhdb_traverse();
extern	int		dhdb_travstart();
#endif


/* "lookat" code (from 'look.c') */
extern	void		lookat();


/* boolean code (from 'bool.c') */
extern	int		bool_eval();
extern	int		bool_locked();	/* evaluate boolean lock */
extern	int		bool_syntax();	/* check a lock's syntax */


/* output to a player through the network layer (in 'tcpio.c') */
extern	int		io_init();
extern	void		io_sync();
extern	void		say();
extern	void		io_logoff();
extern	void		welcome();	/* called by I/O code during login */
extern	void		goodbye();	/* called by I/O code during hangup */
extern	int		login();	/* called by I/O code during login */
extern	void		io_rstnxtwho();	/* reset WHO list traverse */
extern	char		*io_nxtwho();	/* WHO list traverse */


/* runtime support.  (in 'run.c') */
extern	char		*run_actor();	/* object ID of player running */
extern	int		run_level();	/* recursion depth */
extern	int		run();
extern	int		run_tokenize();


/* 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 */
extern	int		activate();


/* 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 */
extern	int		home_object();


/* misc utility functions */
extern	void		logf();
extern	void		logf_close();
extern	int		logf_open();
extern	void		fatal();
extern	void		rot_init();
extern	void		rot_encode();
extern	void		rot_decode();
extern	int		get_random();
extern unsigned int	objid_hash();
extern	int		say_file();	/* dump a file to the player */
extern	char		*itoa();	/* int to ascii */


#define	_INCL_MUD_H
#endif