/*=============================================================================
	FMP7公開API情報
=============================================================================*/
#pragma once

namespace FMP32 {

/*-----------------------------------------------------------------------------
	ブロードキャストメッセージ
-----------------------------------------------------------------------------*/
	namespace MESSAGE {
		static /*const*/ LPCWSTR REGISTER_STRING = L"FMP7 MESSAGE KEY";
		enum {
			START_FMP		= 1,				// 起動
			END_FMP			= 2,				// 終了
		};
	};

/*-----------------------------------------------------------------------------
	エラー番号
-----------------------------------------------------------------------------*/
	namespace ERR {
		enum D {
			NON_ERROR			= 0,		// 正常終了
			FMP_NOT_FOUND		= 1,		// FMP7が見つからない
			BUSY				= 2,		// データ生成中
			OPEN_PROC			= 10,		// 呼び出し元プロセスアクセスエラー
			WRITE_MEMORY		= 11,		// メモリ書き込みエラー
			READ_MEMORY			= 12,		// メモリ読み込みエラー
			WORKSIZE_NOMATCH	= 13,		// ワークサイズが合わない
			WORKSIZE_SHORT		= 14,		// 格納ワークサイズが小さい
			FILE_LOAD			= 15,		// ファイル読み込みエラー
			PARAM_RANGE			= 19,		// パラメータ指定範囲エラー
			PART_RANGE			= 20,		// パート番号指定エラー
			SEEK_RANGE			= 21,		// シーク指定範囲エラー
			COPY_SIZE_OVER		= 22,		// 最大ワークサイズオーバー
			DRIVER_NOT_READY	= 23,		// 演奏ドライバが未起動
		};
	};

/*-----------------------------------------------------------------------------
	アクセスクラス
-----------------------------------------------------------------------------*/
	class FUNC {
	  public:
		virtual BOOL MusicLoad(LPWSTR) = 0;
		virtual BOOL MusicPlay(LPWSTR) = 0;
		virtual BOOL MusicLoad(BYTE*,int) = 0;
		virtual BOOL MusicPlay(BYTE*,int) = 0;
		virtual BOOL MusicPlay(void) = 0;
		virtual BOOL MusicStop(void) = 0;
		virtual BOOL MusicPause(void) = 0;
		virtual BOOL MusicFadeOut(int) = 0;
		virtual BOOL SetMask(int,BOOL) = 0;
		virtual BOOL SetMask(BYTE*) = 0;
		virtual BOOL SetSeek(DWORD) = 0;
		virtual BOOL GetVersion(int*,int*,int*) = 0;
		virtual BOOL GetWorkSize(int*,int*) = 0;
		virtual BOOL GetWorkSize(int*,int*,int*) = 0;
		virtual BOOL CallExAPI(GUID,DWORD,DWORD,DWORD,void*,int,int*) = 0;
		virtual int GetPlayFilename(LPWSTR,int) = 0;
		virtual int GetMusicTitle(LPWSTR,int) = 0;
		virtual int GetMusicCreator(LPWSTR,int) = 0;
		virtual int GetMusicComposer(LPWSTR,int) = 0;
		virtual int GetMusicComment(LPWSTR,int) = 0;
		virtual DWORD GetLastError(void) = 0;
		virtual int GetErrorMessage(LPWSTR,int) = 0;
		virtual int GetExtList(LPWSTR,int,BOOL) = 0;
	};
};

extern FMP32::FUNC* GetFMP7Instance(void);
