// license:BSD-3-Clause
// copyright-holders:Aaron Giles
//============================================================
//
//  output.h - Win32 implementation of MAME output routines
//
//============================================================

#ifndef __WINDOWS_OUTPUT_H__
#define __WINDOWS_OUTPUT_H__


//============================================================
//  CONSTANTS
//============================================================

// window parameters
#define OUTPUT_WINDOW_CLASS         TEXT("MAMEOutput")
#define OUTPUT_WINDOW_NAME          TEXT("MAMEOutput")

//
// These messages are sent by MAME:
//

// OM_MAME_START: broadcast when MAME initializes
//      WPARAM = HWND of MAME's output window
//      LPARAM = unused
#define OM_MAME_START               TEXT("MAMEOutputStart")

// OM_MAME_STOP: broadcast when MAME shuts down
//      WPARAM = HWND of MAME's output window
//      LPARAM = unused
#define OM_MAME_STOP                TEXT("MAMEOutputStop")

// OM_MAME_UPDATE_STATE: sent to registered clients when the state
// of an output changes
//      WPARAM = ID of the output
//      LPARAM = new value for the output
#define OM_MAME_UPDATE_STATE        TEXT("MAMEOutputUpdateState")


//
// These messages are sent by external clients to MAME:
//

// OM_MAME_REGISTER_CLIENT: sent to MAME to register a client
//      WPARAM = HWND of client's listener window
//      LPARAM = client-specified ID (must be unique)
#define OM_MAME_REGISTER_CLIENT     TEXT("MAMEOutputRegister")

// OM_MAME_UNREGISTER_CLIENT: sent to MAME to unregister a client
//      WPARAM = HWND of client's listener window
//      LPARAM = client-specified ID (must match registration)
#define OM_MAME_UNREGISTER_CLIENT   TEXT("MAMEOutputUnregister")

// OM_MAME_GET_ID_STRING: requests the string associated with a
// given ID. ID=0 is always the name of the game. Other IDs are
// only discoverable from a OM_MAME_UPDATE_STATE message. The
// result will be sent back as a WM_COPYDATA message with MAME's
// output window as the sender, dwData = the ID of the string,
// and lpData pointing to a NULL-terminated string.
//      WPARAM = HWND of client's listener window
//      LPARAM = ID you wish to know about
#define OM_MAME_GET_ID_STRING       TEXT("MAMEOutputGetIDString")

// IM_MAME_MESSAGE: send message to MAME
//      WPARAM = ID of the message
//      LPARAM = value
#define IM_MAME_MESSAGE             TEXT("MAMEInputMessage")

//
// These constants are used to identify WM_COPYDATA messages
// coming from MAME:
//

#define COPYDATA_MESSAGE_ID_STRING  1



//============================================================
//  TYPE DEFINITIONS
//============================================================

struct copydata_id_string
{
	uint32_t      id;                 // ID that was requested
	char        string[1];          // string array containing the data
};

#endif /* __WINDOWS_OUTPUT_H__ */
