/*
	Free Cell for WonderSwan
		header file
*/

#define	UNDO_BUF	128
#define	WAIT		2

#define colorok(c1,c2)	((c1 ^ c2) & 1)
#define numok(c1,c2)	((c1>>2)==((c2>>2)-1))
#define samesute(c1,c2)	(((c1 ^ c2) & 3)==0)
#define putok(c1,c2)	(colorok(c1,c2) && numok(c1,c2))
#define putdok(c1,c2)	(samesute(c1,c2) && numok(c1,c2))

#define	CUP	0
#define	CDOWN	1
#define	CMOV	2
#define	FDTOH	3
#define	FRTOH	4
#define	FTOF	5
#define	MOVC	6

#define MAI(n)		(((n) >> 12) & 0x0f)
#define CMD(n)		(((n) >> 8) & 0x0f)
#define ARG1(n)		(((n) >> 4) & 0x0f)
#define ARG2(n)		((n) & 0x0f)
#define	CMDENC(cmd, arg1, arg2)		((cmd) << 8) | ((arg1) << 4) | (arg2)


static void init_game_screen( void );
static int play_game( void );
static void play_move( void );
static void dispCursor( void );
static void dispMark( void );
static u_short far *revCardFont( char card );
static void dispScreen( void );
static void dispField( void );
static void dispCol( int col );
static void dispHydeCard( int col );
static void cardSearch( void );
static void cardSearch2( void );
static void init_game( void );
static void shuffl( void );
static void select( int col, int *n, char *card );
static int cardup( int col, int idx );
static void carddown( int idx, int col );
static void free2home( int n );
static void field2home( int col );
static void cardmove( int from, int to );
static void movecol( int from, int to, int mai, int disp );
static void automove( int disp );
void edit( void );
static void card_read( void );
static void card_write( void );
static int makeName( int x, int y, char *buf );
static void back( int replay );
static rw_error( char *s1, char *s2 );
static void step_write( void );
static void getCard( char n, char *buf );
