cdirt/ascii/
cdirt/data/BULL/
cdirt/data/ZONES/PENDING/
cdirt/pending/
cdirt/src/utils/
cdirt/utils/
#include <stdio.h>
#include <stdarg.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <netdb.h>
#ifdef _OLD_LINUX_
  #include <bstring.h>
#endif
#include <netinet/in.h>


#define SERVER_PORT             9001
#define READLEN    		4096
#define WRITELEN  		4096
#define MAX_CONNECT             32
#define HT_SIZE                 1000

typedef enum { False, True } Boolean;

/* Structure for a connection to the server: */

struct connect {
  int fd;
  Boolean output;
  char readbuff[READLEN];
  char writebuff[WRITELEN];
  char *readpos;
  char *writepos;
};

typedef struct connect Connection;

struct _ht_elem {
  char *ip_addr;
  char *hostname;
  struct _ht_elem *next;
};

typedef struct _ht_elem ht_elem;

/* Macros: */

#define fdesc(x)     connects[x].fd
#define writepos(x)  connects[x].writepos
#define writebuff(x) connects[x].writebuff
#define readpos(x)   connects[x].readpos
#define readbuff(x)  connects[x].readbuff
#define output(x)    connects[x].output

#define COPY(s)                 strcpy((char *) malloc(strlen(s) + 1), s)
#define False                   0
#define True                    1

int conn;                             /* current connection */
int width = 1;                        /* highest connection */

Connection connects[MAX_CONNECT];
ht_elem *htable[HT_SIZE];

int makesock(void);
void write_packet(int);
void read_packet(int);
void new_conn(int);
void end_conn(int);
void init_conn(int i);
int  find_index(int targetfd);
int  find_new_index(int);
int  find_mud(char *text);
Boolean eqmud(char *mudindex, char *mudname);
void read_configuration(FILE *fp); 
int find_index(int targetfd);