/* $Header: /belch_a/users/rearl/tinymuck/include/RCS/interface.h,v 1.2 90/07/19 23:14:38 casie Exp $
 * $Log:	interface.h,v $
 * Revision 1.2  90/07/19  23:14:38  casie
 * Removed log comments from top.
 * 
 * 
 */
#include "copyright.h"

#include "db.h"
#include <sys/time.h>
#ifdef RSAIX
#include <time.h>
#endif
#ifdef BSD42
#include <sys/types.h>
#endif

/* these symbols must be defined by the interface */
extern int notify(dbref, const char *);
extern int shutdown_flag; /* if non-zero, interface should shut down */
extern void emergency_shutdown(void);
extern int boot_off(dbref);
extern int check_awake(dbref);
extern time_t startup_time;
extern int errno;

/* the following symbols are provided by game.c */
extern dbref global_trigger;

/* the following symbols are provided by muck_strftime.c */
extern size_t muck_strftime(char *, size_t, const char *, time_t);

/* max length of command argument to process_command */
#define MAX_COMMAND_LEN 1024
#define BUFFER_LEN ((MAX_COMMAND_LEN)*8)
extern void process_command(dbref, const char *, dbref, int);
extern int do_act(dbref, const char *, dbref);

extern dbref create_player(const char *, const char *);
extern dbref connect_player(const char *, const char *);
extern void do_look_around(dbref);

extern int init_game(const char *, const char *);
extern void dump_database();
extern void panic(const char *);
extern char buf[BUFFER_LEN];

/* from fifoq.c */
extern int gotio;

/* from stringutil.c */
extern char * alloc_string(const char *);

struct text_block {
  int                   nchars;
  struct text_block     *nxt;
  char                  *start;
  char                  *buf;
};

struct text_queue {
  struct text_block *head;
  struct text_block **tail;
};

struct descriptor_data {
  int descriptor;
  int connected;
  dbref player;
  char *output_prefix;
  char *output_suffix;
  int output_size;
  struct text_queue output;
  struct text_queue input;
  char *raw_input;
  char *raw_input_at;
  long last_time;
  long connected_at;
  const char *hostname;
  int quota;
  struct descriptor_data *next;
  struct descriptor_data **prev;
};

extern struct descriptor_data *descriptor_list;