/* flags.h - object flags */

#include "copyright.h"

#ifndef __FLAGS_H
#define __FLAGS_H

#include "htab.h"

/* ---------------------------------------------------------------------------
 * FLAGENT: Information about object flags.
 */

typedef struct flag_entry FLAGENT;
struct flag_entry {
	char	*flagname;	/* Name of the flag */
	int	flagvalue;	/* Which bit in the object is the flag */
	char	flaglett;	/* Flag letter for listing */
	int	listperm;	/* Who sees this flag when set */
	int	(*handler)();	/* Handler for setting/clearing this flag */
};

typedef struct flag_selection FLAGSEL;
struct flag_selection {
	FLAG	player_flags;	/* Standard flags for players */
	FLAG	room_flags;	/* Flags for rooms */
	FLAG	thing_flags;	/* Flags for things */
	FLAG	exit_flags;	/* Flags for exits */
	FLAG	player_eflags;	/* Extended flags for players */
};

extern FLAGENT gen_flags[];
extern FLAGENT exit_flags[];
extern FLAGENT thing_flags[];
extern FLAGENT player_flags[];
extern FLAGENT room_flags[];

/* ---------------------------------------------------------------------------
 * OBJENT: Fundamental object types
 */

typedef struct object_entry OBJENT;
struct object_entry {
	char	*name;
	char	lett;
	int	perm;
	FLAGENT	*flaglist;
	HASHTAB	*flaghtab;
};

extern OBJENT object_types[8];

extern void init_flagtab();
extern void display_flagtab (dbref player, FLAGENT *flagp, const char *prefix);
extern void flag_set (dbref target, dbref player, char *flag);
extern char *flag_description (dbref player, dbref target);
extern FLAGENT *find_flag (dbref thing, char *flagname);
extern char *decode_flags (dbref player, FLAG flagword, int flagtype);
extern char *unparse_object (dbref player, dbref target);
extern char *unparse_object_numonly (dbref target);

#define unparse_flags(p,t) decode_flags(p,Flags(t),Typeof(t))

#endif