#ifndef _MJP_H_6e3106c7_ #define _MJP_H_6e3106c7_ #define MJP_DEFAULT_PORT 19786 /* 0x4d4a, "MJ" in ASCII */ #define MJP_MAGICLEN 5 #define MJP_MAXCSLENLEN 8 #define MJP_MAXCHATLEN 1024 #define MJP_MAXREJECT 512 #define DECKSIZE 148 #define WALLSIZE 136 #define REPLSIZE 12 #define DORASIZE 10 #include "tiles.h" /* I'd much rather use an enum for WIND_*, but that means either not using it as an array index or breaking the data hiding of the enum. */ #define WIND_E 0 #define WIND_S 1 #define WIND_W 2 #define WIND_N 3 #define WIND_NONE (-1) #define WIND_BAD (-2) #define NWIND 4 #define WIND_NEXT(w) (((w)+1)%NWIND) #define MAXMELDS 4 #define MELDSIZE 4 #define MAXHAND 14 #define MAXPNAMELEN 64 #define MAXFS 8 typedef enum { PT_DECK = 1, PT_WALL, PT_HAND, PT_FS, PT_REPL, PT_DORA, PT_DISC, PT_MELD } PLACETYPE; typedef struct place PLACE; struct place { PLACETYPE type; union { int wall; int hand; int fs; int repl; int dora; int disc; struct { int h; int m; } meld; } ; } ; extern const unsigned char magic_server[MJP_MAGICLEN]; extern const unsigned char magic_client[MJP_MAGICLEN]; extern const TILE unshuffled_deck[DECKSIZE]; extern const char * const tilenames[TILE__N]; extern int whitespace(unsigned char); extern PLACE makeplace(PLACETYPE, ...); extern int pidx(unsigned char); extern unsigned char pxid(int); extern int charwind(unsigned char); extern unsigned char windchar(int); extern unsigned char xwindchar(int); extern int same_suit(TILE, TILE); #define tile_num(t) (tile_num_[(t)]) extern int tile_num_[TILE__N]; #define tileflags(x) (tileflags_[(x)]) extern unsigned short int tileflags_[TILE__N]; #define TF_SIMPLE 0x0001 #define TF_TERMINAL 0x0002 #define TF_FS 0x0004 #define TF_GREEN 0x0008 #define TF_REVERSIBLE 0x0010 #define TF_FIVE 0x0020 #define TF_DRAGON 0x0040 #define TF_WIND 0x0080 #define TF_LOWER3 0x0100 #define TF_MIDDLE3 0x0200 #define TF_UPPER3 0x0400 #define TF_LOWER4 0x0800 #define TF_UPPER4 0x1000 #define TF_EVEN 0x2000 #define TF_SUIT (TF_SIMPLE|TF_TERMINAL) #define TF_HONOUR (TF_DRAGON|TF_WIND) #define tile_nextup(t) (tile_nextup_[(t)]) extern TILE tile_nextup_[TILE__N]; #define tile_nextdn(t) (tile_nextdn_[(t)]) extern TILE tile_nextdn_[TILE__N]; #define wind_to_tile(w) (wind_to_tile_[(w)]) extern TILE wind_to_tile_[NWIND]; #define tile_to_wind(t) (tile_to_wind[(t)]) extern int tile_to_wind_[TILE__N]; #endif