/
driver3.2@242/autoconf/
driver3.2@242/doc/LPC/
driver3.2@242/hosts/
driver3.2@242/hosts/amiga/NetIncl/
driver3.2@242/hosts/amiga/NetIncl/netinet/
driver3.2@242/hosts/amiga/NetIncl/sys/
driver3.2@242/hosts/atari/
driver3.2@242/hosts/fcrypt/
driver3.2@242/mudlib/
driver3.2@242/mudlib/sys/
driver3.2@242/util/
driver3.2@242/util/indent/hosts/next/
driver3.2@242/util/make_docs/
#ifndef COMM_H
#define COMM_H

#include <sys/types.h>

#ifdef atarist
#include "hosts/atari/socket.h"
#define SOCKET_INC "hosts/atari/socket.c"
#endif /* atarist */

#ifdef AMIGA
#include "hosts/amiga/socket.h"
#define SOCKET_INC "comm.h"
#define SOCKET_LIB "hosts/amiga/socket.h"
#endif /* AMIGA */

#if !defined (SOCKET_LIB) && !defined(SOCKET_INC)
#include <sys/socket.h>
#ifdef _AIX
#include <sys/socketvar.h>
#endif
#include <netinet/in.h>
#include <arpa/inet.h>
#endif /* SOCKET_LIB */

#ifdef MSDOS
#define SOCKET_INC "msdos/pcomm.h"
#endif

#include "interpret.h"

#if !defined (SOCKET_LIB) && !defined(SOCKET_INC)
#define SOCKET_T int
#define socket_number(s) (s)
#define socket_ioctl  ioctl
#define socket_select select
#define socket_read   read
#define socket_write  write
#define socket_close  close
#define SOCKET_INC   "comm.h"
#endif /* SOCKET_LIB */

#if defined(SunOS4) || defined(atarist)
SOCKET_T socket PROT((int, int, int));
int getpeername PROT((SOCKET_T, struct sockaddr *, int *));
void  shutdown PROT((SOCKET_T, int));
int setsockopt PROT((SOCKET_T, int, int, char *, int));
int bind PROT((SOCKET_T, struct sockaddr *, int));
int listen PROT((SOCKET_T, int));
SOCKET_T accept PROT((SOCKET_T, struct sockaddr *, int *));
struct timeval;
int select PROT((int, fd_set *, fd_set *, fd_set *, struct timeval *));
#endif /* SunOS4 */

#define MAX_TEXT	2048

#ifndef MAX_SOCKET_PACKET_SIZE
#define MAX_SOCKET_PACKET_SIZE	1024	/* Wild guess. */
#endif
#define DESIRED_SOCKET_PACKET_SIZE 800

#define MESSAGE_FLUSH ((char*)NULL)

struct interactive {
    SOCKET_T socket;
    struct object *ob;		/* Points to the associated object */
    struct input_to *input_to;	/* To be called with next input line ! */
    struct svalue prompt;
    struct object *modify_command;
    struct sockaddr_in addr;
    char closing;		/* True when closing this socket. */
    char do_close;		/* This is to be closed down. */
    char noecho;		/* Don't echo lines */
    char catch_tell_activ;
    int text_end;		/* first free char in buffer */
    int text_start;		/* where we are up to in player cmd buffer */
    struct interactive *snoop_on;
    struct object      *snoop_by;
    int last_time;		/* Time of last command executed */
    char *default_err_message;	/* This or What ? is printed when error */
    int trace_level;		/* Debug flags. 0 means no debugging */
    char *trace_prefix;		/* Trace only object which has this as name prefix */
    struct ed_buffer *ed_buffer;	/* Local ed */
    int message_length;
    struct object *next_player_for_flush, *previous_player_for_flush;
#ifdef PORTALS
    int from_portal;		/* True if this player has arrived through a portal */
    int portal_socket;		/* All messages should go through this socket, if open */
    int out_portal;		/* True if going out through a portal. */
#endif /* PORTALS */
#ifdef ACCESS_RESTRICTED
    void *access_class;         /* represents a "cluster" where this player comes from */                              
#endif
#ifdef MUDWHO
    int login_time;
#endif
    char text[MAX_TEXT];
    char message_buf[DESIRED_SOCKET_PACKET_SIZE+1];
};

void set_prompt PROT((char *));
struct svalue *query_prompt PROT((struct object *));

#endif /* COMM_H */