/* Codebase Macros - SocketMUD
 *
 * This should cover the following derivatives:
 *
 * SocketMUD: Versions 2.1 and up.
 *
 * Please send any needed updates to imc@imc2.org
 */

#ifndef __IMC2CFG_H__
#define __IMC2CFG_H__

#if !defined(IMCSTANDALONE)

#define CH_IMCDATA(ch)           ((ch)->imcchardata)
#define CH_IMCLEVEL(ch)          ((ch)->level)
#define CH_IMCNAME(ch)           ((ch)->name)
#define CH_IMCTITLE(ch)          ( "Player" )
#define CH_IMCRANK(ch)           ((ch)->title )
#define first_descriptor dsock_list

#else

typedef unsigned char bool;

#if !defined(FALSE)
#define FALSE 0
#endif

#if !defined(TRUE)
#define TRUE 1
#endif

#define CH_IMCDATA(ch)           ((ch)->imcchardata)
#define CH_IMCLEVEL(ch)          ((ch)->level)
#define CH_IMCNAME(ch)           ((ch)->name)
#define CH_IMCSEX(ch)            ((ch)->sex)
#define CH_IMCTITLE(ch)          ((ch)->title )
#define CH_IMCRANK(ch)           ((ch)->title )

typedef enum
{
   SEX_NEUTRAL, SEX_MALE, SEX_FEMALE
} genders;

#define STATE_PLAYING 1
#define LOWER(c)		((c) >= 'A' && (c) <= 'Z' ? (c)+'a'-'A' : (c))

typedef struct user_data D_MOBILE;
typedef struct conn_data D_SOCKET;

struct user_data
{
   struct imcchar_data *imcchardata;
   char *name;
   int level;
   short sex;
};

struct conn_data
{
   D_SOCKET *next;
   D_SOCKET *prev;
   D_MOBILE *original;
   D_MOBILE *player;
   short state;
};

D_SOCKET *first_descriptor;
D_SOCKET *last_descriptor;
#endif

#endif