/*=============================================================================
	exMXDRV.dll拡張API
=============================================================================*/
#pragma once
#include	"fmp32_api.h"

namespace exMXDRV {

/*-----------------------------------------------------------------------------
	アクセスクラス
-----------------------------------------------------------------------------*/
	class FUNC {
	  public:
		enum {								// ファンクション
			GET_COMMENT = 1,				// 曲データコメント取得
			GET_DRIVER = 2,					// 動作ドライバ
			GET_FILEPATH = 3,				// 演奏ファイル情報取得
		};

		// ドライバ情報
		static const DWORD DRIVER_MXDRV		= 0x00000001;
		static const DWORD DRIVER_PCM8		= 0x00000002;

		// 取得ファイル種別
		static const int FILE_MUSIC			= 0;
		static const int FILE_PDX			= 1;

		// コメントバッファ
		static const int COMMENT_SIZE		= 80 *2;

	  public:
		FUNC::FUNC(void);
		char* GetComment(void);
		DWORD GetDriverInfo(void);
		char* GetFilePath(int);

	  private:
		FMP32::FUNC* hFMP7;
		char CommentBuff[COMMENT_SIZE +1];
		char FilePath[_MAX_PATH +1];
	};

/*-----------------------------------------------------------------------------
	拡張共有メモリ情報
-----------------------------------------------------------------------------*/
	namespace SHM {
		// GUID {2DA4ECF6-C4F4-452d-BD0F-0B201974C7F8}
		static const GUID GUID = 
			{ 0x2da4ecf6, 0xc4f4, 0x452d,
				{ 0xbd, 0xf, 0xb, 0x20, 0x19, 0x74, 0xc7, 0xf8 }
			};

		// 対応音源パート数
		static const int PARTS_FM		= 8;
		static const int PARTS_ADPCM	= 8;
		static const int PARTS_ALL		= (PARTS_FM +PARTS_ADPCM);

		// パートモード種別
		static const BYTE EX_MODE_NON	= 0x00;		// 未使用
		static const BYTE EX_MODE_FM	= 0x01;		// FM
		static const BYTE EX_MODE_ADPCM	= 0x02;		// FMADPCM

		// 拡張情報ワーク構造体
#pragma pack(1)
		typedef struct tEX {
			BYTE	TimerB;					// TimerB値
			BYTE	Mode[PARTS_ALL];		// 音源詳細(※ EX_MODE参照)
//			BYTE	Note[PARTS_ALL];		// KEY CODE 3(o1d+) 〜 98(o9d)
			BYTE	Vol[PARTS_ALL];			// 実音量値
			BYTE	Pan[PARTS_ALL];			// パン[0-3]
		} EX, *PEX;
#pragma pack()
	};
};
