pdirt/data/
pdirt/data/HELP/
pdirt/data/HELP/0/
pdirt/data/HELP/F/
pdirt/data/HELP/G/
pdirt/data/HELP/H/
pdirt/data/HELP/J/
pdirt/data/HELP/K/
pdirt/data/HELP/O/
pdirt/data/HELP/Q/
pdirt/data/HELP/R/
pdirt/data/HELP/U/
pdirt/data/HELP/V/
pdirt/data/HELP/Y/
pdirt/data/HELP/Z/
pdirt/data/MESSAGES/
pdirt/data/POWERINFO/
pdirt/data/WIZ_ZONES/
pdirt/drv/
pdirt/drv/bin/
pdirt/drv/compiler/converter/
pdirt/drv/compiler/libs/
pdirt/drv/compiler/scripts/
pdirt/drv/include/AberChat/
pdirt/drv/include/InterMud/
pdirt/drv/include/machine/
pdirt/drv/src/InterMud/
pdirt/drv/src/Players/
pdirt/drv/utils/UAFPort/
pdirt/drv/utils/dnsresolv/
pdirt/drv/utils/gdbm/
/*******************************************************************
 * $Header: /home/kender/muddev/marxkove/include/RCS/board.h,v 1.2 1995/02/17 22
:01:22 kender Exp $
 *
 * $Revision: 1.1 $
 * $Date: 1996/02/15 01:36:15 $
 * $State: Exp $
 * $Author: kender $
 * $Locker: kender $
 *
 *-----------------------------------------------------------------------
 *                         Kove Development Code
 *
 * $Log: intermudP.h,v $
 * Revision 1.1  1996/02/15  01:36:15  kender
 * Initial revision
 *
 *
 *********************************************************************/

#ifndef __INTERMUDP_H__
#define __INTERMUDP_H__

#include "intermud.h"
#include "darray.h"

typedef enum __serviceTypes {
 SERV_TELL, SERV_WHO, SERV_FINGER, SERV_LOCATE, SERV_CHANNEL,
 SERV_NEWS, SERV_FILE, SERV_SMTP, SERV_FTP, SERV_NNTP, SERV_HTTP,
 SERV_RCP} serviceTypes;

extern char *services[];

typedef enum __messageTypes {
  MESG_TELL, MESG_WHO_REQ, MESG_WHO_REPLY, MESG_FINGER_REQ,
  MESG_FINGER_REPLY, MESG_LOCATE_REQ, MESG_LOCATE_REPLY,
  MESG_CHANLIST_REPLY, MESG_CHANNEL_M, MESG_CHANNEL_E,
  MESG_CHANNEL_T, MESG_CHANNEL_ADD, MESG_CHANNEL_REMOVE,
  MESG_CHANNEL_ADMIN, MESG_CHAN_WHO_REQ, MESG_CHAN_WHO_REPLY,
  MESG_CHANNEL_LISTEN, MESG_CHAN_USER_REQ, MESG_CHAN_USER_REPLY,
  MESG_NEWS_READ_REQ, MESG_NEWS_POST, MESG_NEWSGRP_LIST_REQ,
  MESG_MAIL, MESG_FILE, MESG_ERROR, MESG_STARTUP_REQ_3,
  MESG_STARTUP_REPLY, MESG_SHUTDOWN, MESG_MUDLIST,
  MESG_EMOTETO,
  MESG_UNKNOWN } messageTypes;

typedef enum __elemTypes {
  TYPE_STRING, TYPE_LIST, TYPE_MAPPING, TYPE_INT, TYPE_OTHER
} elemTypes;

typedef struct __listObject {
  char		*origString;  
  int		numElements;  
  elemTypes	*type;
  char 		**data;
} listObject;

typedef struct __mappingObject {
  char		*origString;
  int		numElements;
  elemTypes	*keyType,*valueType;
  char		**keys,**values;
} mappingObject;

listObject *parseList(char *list);
void destroyList(listObject *);
mappingObject *parseMapping(char *mapping);
void destroyMapping(mappingObject *);

typedef void (*imHandler)(char *type,
			  int  ttl,
			  char *origMud,
			  char *origUser,
			  char *targetMud,
			  char *targetUser,
			  listObject *packet);

#define DECLARE_HANDLER(name) \
void (name)(char *type, int ttyl, \
	    char *origMud, char *origUser, \
	    char *targetMud, char *targetUser, \
	    listObject *packet)

typedef struct __imMapping {
  messageTypes		type;
  char			*name;
  imHandler		handler;
} imMapping;

extern char *immessages[];
extern pdarray mudlist;
extern int numMuds;

typedef struct __mudInfo {
  char		*name;
  char		*type;
  char		*addr;
  int		isup;
  int		playerPort;
  int		tcpPort;
  int		udpPort;
} mudInfo;
    
#define INTERMUD_DIR		"INTERMUD/"
#define MUDLIST_ID 		INTERMUD_DIR"mudlist.id"
#define CHANLIST_ID 		INTERMUD_DIR"chanlist.id"
#define INTERMUD_PASS 		INTERMUD_DIR"impass.id"
#define MUDLIST_FILE 		INTERMUD_DIR"mudlist"
#define BANNED_MUD_FILE 	INTERMUD_DIR"banned.mud"


#define NCOPY(a) ( (a) ? COPY(a) : NULL )

/*
 * Normal message handler declarations
 */

DECLARE_HANDLER(_imTell );
DECLARE_HANDLER(_imEmote );
DECLARE_HANDLER(_imWhoReq );
DECLARE_HANDLER(_imWhoReply );
DECLARE_HANDLER(_imFingerReq );
DECLARE_HANDLER(_imFingerReply );
DECLARE_HANDLER(_imLocateReq );
DECLARE_HANDLER(_imLocateReply );
DECLARE_HANDLER(_imChanlReply );
DECLARE_HANDLER(_imChanM );
DECLARE_HANDLER(_imChanE );
DECLARE_HANDLER(_imChanT );
DECLARE_HANDLER(_imChanAdd );
DECLARE_HANDLER(_imChanRem );
DECLARE_HANDLER(_imChanAdmin );
DECLARE_HANDLER(_imChanWhoReq );
DECLARE_HANDLER(_imChanWhoReply);
DECLARE_HANDLER(_imChanListen);
DECLARE_HANDLER(_imChanUserReq);
DECLARE_HANDLER(_imChanUserReply );
DECLARE_HANDLER(_imNewsReadReq );
DECLARE_HANDLER(_imNewsPost );
DECLARE_HANDLER(_imNewsListReq );
DECLARE_HANDLER(_imMail );
DECLARE_HANDLER(_imFile );
DECLARE_HANDLER(_imError );
DECLARE_HANDLER(_imStartup3 );
DECLARE_HANDLER(_imStartupReply );
DECLARE_HANDLER(_imShutdown );
DECLARE_HANDLER(_imMudList );
DECLARE_HANDLER(_imUnknown );

char *__imAddStr(char *orig, char *str);
char *__imAddInt(char *orig, int num);
char *__imAddlStr(char *orig, char *str);
char *__imAddlInt(char *orig, int num);
char *__imStartList(char *orig);
char *__imStopList(char *orig,int comma);
char *__imStartMap(char *orig);
char *__imStopMap(char *orig);
int   __iSend(char *str);
int  buildImPacket(listObject *list,char *str);

#endif __INTERMUDP_H__