/* match.h */


#include "copyright.h"

#include "db.h"

/* match constants */
#ifdef DO_GLOBALS
#define NORMAL_MATCH 0
#define GLOBAL_MATCH 1
#define REMOTE_MATCH 2
#endif

/* match functions */
/* Usage: init_match(player, name, type); match_this(); match_that(); ... */
/* Then get value from match_result() */

/* initialize matcher */
extern void init_match(dbref player, const char *name, int type);
extern void init_match_check_keys(dbref player, const char *name, int type);
/* match (LOOKUP_TOKEN)player */
extern void match_player(void);
/* match (NUMBER_TOKEN)number */
extern void match_absolute(void);
/* match "me" */
extern void match_me(void);
/* match "here" */
extern void match_here(void);
/* match the name of the player's container */
extern void match_container(void);
/* match something player is carrying */
extern void match_possession(void);
/* match something in the same room as player */
extern void match_neighbor(void);
/* match an exit from player's room */
extern void match_exit(void);
/* all of the above, except only Wizards do match_absolute and match_player */

#ifdef DO_GLOBALS
/* master room match */
extern void init_match_global(dbref player, const char *name, int type);
/* master room match, check keys */
extern void init_match_global_check_keys(dbref player, const char *name, int type);
/* remote matching */
extern void init_match_remote(dbref location, const char *name, int type);
extern void match_remote(void);
extern void match_remote_contents(void);
#endif

extern void match_everything(void);
/* wrapper for match_everything with control check */
extern dbref match_controlled(dbref player, const char *name);
/* return match results */
extern dbref match_result(void); /* returns AMBIGUOUS for multiple inexacts */
extern dbref last_match_result(void);  /* returns last result */
extern dbref noisy_match_result(void);  /* wrapper for match_result */


extern dbref pref_match(dbref player, dbref list, const char *string);