/*****************************************************************************\
     Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
                This file is licensed under the Snes9x License.
   For further information, consult the LICENSE file in the root directory.
\*****************************************************************************/

/***********************************************************************************
  SNES9X for Mac OS (c) Copyright John Stiles

  Snes9x for Mac OS X

  (c) Copyright 2001 - 2011  zones
  (c) Copyright 2002 - 2005  107
  (c) Copyright 2002         PB1400c
  (c) Copyright 2004         Alexander and Sander
  (c) Copyright 2004 - 2005  Steven Seeger
  (c) Copyright 2005         Ryan Vogt
  (c) Copyright 2019         Michael Donald Buckley
 ***********************************************************************************/


#ifndef _mac_netplay_h_
#define _mac_netplay_h_

#define	WRITE_LONG(p, v) \
{ \
	*((p) + 0) = (uint8) ((v) >> 24); \
	*((p) + 1) = (uint8) ((v) >> 16); \
	*((p) + 2) = (uint8) ((v) >>  8); \
	*((p) + 3) = (uint8) ((v) >>  0); \
}

#define	WRITE_BYTE(p, v) \
{ \
	*(p) = (uint8) (v); \
}

#define READ_LONG(p) \
( \
	(((uint8) *((p) + 0)) << 24) | \
 	(((uint8) *((p) + 1)) << 16) | \
 	(((uint8) *((p) + 2)) <<  8) | \
 	(((uint8) *((p) + 3)) <<  0) \
)

#define READ_BYTE(p) \
( \
	(uint8) *(p) \
)

//#define SELF_TEST

#define	NP_SERVER_MAGIC	'S'
#define	NP_CLIENT_MAGIC	'C'
#define	NP_MAX_PLAYERS	5
#define	NP_MAX_CLIENTS	(NP_MAX_PLAYERS - 1)
#define NP_PORT			6096

#ifdef SELF_TEST
#define SOCK_NAME		"/tmp/s9xsocket"
#endif

enum
{
	kNPClientNameSent = 101,
	kNPClientROMInfoWaiting,
	kNPClientROMOpened,
	kNPClientSRAMWaiting,
	kNPClientSRAMLoaded,
	kNPClientPlayerWaiting,
	kNPClientPlayWaiting,
	kNPClientStartWait
};

enum
{
	kNPServerNameRequest = 201,
	kNPServerNameReceived,
	kNPServerROMInfoWillSend,
	kNPServerSRAMWillSend,
	kNPServerPlayerWillSend,
	kNPServerStart
};

int socket_read (int, unsigned char *, int);
int socket_write (int, unsigned char *, int);
void NPError (const char *, int);
void NPNotification (const char *, int);

#endif
