/*******************************************************************************
*									       *
* [PSX Multi Converter 共通ライブラリ]					       *
*									       *
*	FILE NAME	: PsxPub.h 					       *
*									       *
*	History		| Comment				Name	       *
*     ------------------+--------------------------------------------------    *
*	2000.01.23	| 新規作成				ふぃろ	       *
*	2000.05.17	| CDサポートのため全面修正		ふぃろ	       *
*	2000.10.31	| LibPsrに一部機能を移行		ふぃろ	       *
*	2001.12.31	| 非サポート形式ストリームのフラグ	ふぃろ	       *
*	2002.01.03	| PlbDeleteCDAZ()を追加			ふぃろ         *
*	2002.02.20	| ライセンス管理機能を追加		ふぃろ	       *
*	2002.05.15	| 変換処理を全面修正			ふぃろ	       *
*	2003.04.22	| Webサービス機能の追加			ふぃろ	       *
*	2003.07.03	| KbMedia Player連携対応		ふぃろ	       *
*	2003.07.03	| ボリューム設定方法の変更		ふぃろ	       *
*	2003.07.05	| フレーム表示ウインドウの機能拡張	ふぃろ	       *
*	2004.04.26	| CDAZファイルバージョンアップ V5	ふぃろ	       *
*	2004.05.04	| プラグインライセンスチェック		ふぃろ	       *
*									       *
*			(C) Copyright ふぃろ 2000-2004. All rights reserved.   *
*******************************************************************************/


#ifndef PSXMC_PUBLIC
#define PSXMC_PUBLIC

#ifdef PSXPUB_GOGODLL
#include "musenc.h"	// GOGO.DLL用のinclude
#endif

#include "CdAccess.h"	// CDアクセスのinclude
#include "Psrp.h"	// Pluginのinclude
#include "LibPsr.h"	// PSRプラグイン操作ライブラリのinclude

#ifndef CEXPORT
#define CEXPORT	extern __declspec (dllexport)
#endif


#ifndef ListView_SetCheckState
#define ListView_SetCheckState(hwndLV, i, fCheck) \
	ListView_SetItemState(hwndLV, i, \
		INDEXTOSTATEIMAGEMASK((fCheck)+1), LVIS_STATEIMAGEMASK)
#endif


#define PlbENABLEITEM(Mhdlg, Mitem, Menable) \
	EnableWindow(GetDlgItem(Mhdlg, Mitem), (BOOL)(Menable ? TRUE : FALSE))

#define PlbSHOWITEM(Mhdlg, Mitem, Mshow) \
	ShowWindow(GetDlgItem(Mhdlg, Mitem), (Mshow)?SW_SHOWNA:SW_HIDE)



CEXPORT	VOID	PlbDEBUG(PSZ pszMsg, ...);
CEXPORT	VOID	PlbSETDEBUG(BOOL fDebug);

/******************************************************************************/
/*									      */
/*	環境操作							      */
/*									      */
/******************************************************************************/


enum {				// タブページタイプ ----------------------------
	PLBENVTAB_DRIVE,		// 「ドライブ」タブ
	PLBENVTAB_PSR,			// 「PSR」タブ
	PLBENVTAB_USER,			// ユーザ定義タブ
	PLBENVTAB_COLOR,		// 「画質」タブ
	PLBENVTAB_CDAZANA,		// 「CDAZ解析」タブ		20040506
	NumPLBENVTAB
};


#define PLBWM_SETENV		(WM_APP+610)
#define PLBWM_UPDATEENV		(WM_APP+611)



typedef struct {		// 環境設定タブページ情報 ----------------------
	DWORD		dwTabType;	// タブページタイプ	PLBENVTAB_XXX
	PSZ		pszName;	// タブ名
	HINSTANCE	hInstance;	// ダイアログのインスタンス
	PSZ		pszTemplate;	// ダイアログテンプレート
	DLGPROC		lpDialogFunc;	// ダイアログプロシージャ
	LPARAM		lParam;		// ダイアログパラメータ
} PLBENVTABPAGE, *PPLBENVTABPAGE;


CEXPORT	BOOL	PlbSetEnviron(	// 環境設定パネル ------------------------------
	HWND		hWnd,		// (I) ウインドウハンドル
	PSZ		pszTitle,	// (I) ダイアログタイトル	NULL可
	INT		iNumPage,	// (I) タブページ数
	PPLBENVTABPAGE	ptabPage);	// (I) 環境設定タブページ情報


CEXPORT	INT	PlbGetCdDrive(	// CD-ROMドライブ情報の取得 --------------------
	PSZ		pszVendor,	// (O) ベンダID			NULL可
	PSZ		pszProduct,	// (O) プロダクトID		NULL可
	PSZ		pszRevision);	// (O) プロダクト版数		NULL可


CEXPORT	INT	PlbGetPluginInfo( // プラグイン情報の取得 ----------------------
	INT		iIndex,		// (I) インデックス		-1可
	PSZ		pszFile,	// (I/O) プラグインファイル名	NULL可
	PSZ		pszName,	// (O) 識別名			NULL可
	PUSHORT		pusVersion,	// (O) バージョン		NULL可
	PUSHORT		pusSpVersion,	// (O) 判定サポートバージョン	NULL可
	PSZ		pszCopyright,	// (O) コピーライト		NULL可
	LPDWORD		lpfdwFunction,	// (O) サポート機能フラグ	NULL可
	PSZ		pszSiteName,	// (O) サイト名			NULL可
	PSZ		pszSiteUrl);	// (O) サイトURL		NULL可


			// サポート機能フラグ (上位16bit : 下位16bit=LBRFUNC_XX)
#define PLBFUNC_NOUSE		0x10000	// 未使用プラグイン	(一時情報)


				// 使用言語の取得 ------------------------------
CEXPORT	INT	PlbGetLanguage(VOID);


enum {
	PLBLANG_ENGLISH,
	PLBLANG_JAPANESE,
	NumPLBLANG
};


/******************************************************************************/
/*									      */
/*	CDAZ(CD Analyze)ファイル操作					      */
/*									      */
/******************************************************************************/


#define HCDAZ		HANDLE		// CDAZハンドル


#define MaxCDAZFILENAME		48	// CDAZファイル名文字数
#define MaxPLUGINNUM		256	// プラグインの最大数
#define MaxPLUGINFILENAME	16	// プラグインファイル名文字数
#define MaxCDTITLE		64	// CDタイトル文字数
#define MaxSTREAMTITLE		48	// ストリームタイトル文字数
#define MaxDEFSTRTITLE		16	// 省略時ストリームタイトル接頭語文字数



CEXPORT HANDLE	PlbFindCDAZ(	// CDAZファイルの探索 --------------------------
	HANDLE		hFind,		// (I) 探索ハンドル	NULL:開始
	PSZ		pszFile);	// (O) CDAZファイル名	NULL:クローズ


CEXPORT	HCDAZ	PlbLoadCDAZ(	// CDAZファイルのロード ------------------------
	LPCTSTR		lpPath,		// (I) パス			NULL可
	LPCTSTR		lpFile,		// (I) CDAZファイル名
	PUINT		puiResult);	// (O) ロード結果コードフラグ	NULL可


					// ロード結果コードフラグ - - - - - - -
#define PLBLDRESULT_OLDVERSION		0x01000000	// 古いCDAZ
#define PLBLDRESULT_NOTFOUND		0x02000000	// CDAZが見つからない
#define PLBLDRESULT_OPENERROR		0x03000000	// オープンエラー
#define PLBLDRESULT_READERROR		0x04000000	// 読み取りエラー
#define PLBLDRESULT_NOMEMORY		0x05000000	// メモリ不足
#define PLBLDRESULT_ERRORMASK		0xff000000	// エラーレベルマスク
#define PLBLDRESULT_WARNINGMASK		0x00ffffff	// 警告レベルマスク

#define PLBLDRESULT_PLUGINNOTFOUND	0x0001	// プラグイン未発見ストリーム
#define PLBLDRESULT_NEWPLUGIN		0x0002	// 新しいプラグイン
#define PLBLDRESULT_NONESYSTEM		0x1000	// 外部CDAZファイル


CEXPORT BOOL	PlbSaveCDAZ(	// CDAZファイルのセーブ ------------------------
	LPCTSTR		lpPath,		// (I) パス			NULL可
	LPCTSTR		lpFile,		// (I) CDAZファイル名		NULL可
	HCDAZ		hcdaz);		// (I) CDAZハンドル


CEXPORT BOOL	PlbDeleteCDAZ(	// CDAZファイルの削除 ----------------- 20020103
	LPCTSTR		lpPath,		// (I) パス			NULL可
	LPCTSTR		lpFile);	// (I) CDAZファイル名		NULL可



CEXPORT HCDAZ	PlbAllocCDAZ(	// CDAZデータのアロケーション ------------------
	LPCTSTR		lpFileName,	// (I) オリジナルファイル名
	LPCTSTR		lpCdTitle,	// (I) CDタイトル
	LPCTSTR		lpDefTitle,	// (I) 省略時ストリームタイトル接頭語
	PVOLUMEINFO	lpVolInfo,	// (I) ボリューム情報		20040507
	INT		iPluginBuff,	// (I) プラグインバッファ初期値	0指定可
	INT		iStreamBuff);	// (I) ストリームバッファ初期値	0指定可


CEXPORT VOID	PlbFreeCDAZ(	// CDAZデータの解放 ----------------------------
	HCDAZ		hcdaz);		// (I) CDAZハンドル


CEXPORT BOOL	PlbSetStreamCDAZ( // CDAZデータへのストリーム設定 --------------
	HCDAZ		hdaz,		// (I) CDAZハンドル
	LPCTSTR		lpTitle,	// (I) ストリームタイトル	NULL可
	LPPSRSTREAMINFO	lpStreamInfo,	// (I) ストリームデータ情報
	LPCTSTR		lpPlugin,	// (I) プラグインファイル名
	USHORT		usVersion,	// (I) プラグインバージョン
	LPCTSTR		lpSite,		// (I) サイト名			NULL可
	LPCTSTR		lpUrl);		// (I) サイトURL		NULL可


CEXPORT PSZ	PlbMakeCDAZName( // CDAZファイル名の作成 -----------------------
	INT		iNumToc,	// (I) TOCの数
	LPTOCENTRY	lptoc,		// (I) TOC
	PVOLUMEINFO	pvolInfo,	// (I) ボリューム情報	NULL=旧CDAZ
	PSZ		pszFile);	// (O) CDAZファイル名


CEXPORT	INT	PlbGetCDAZInfo(	// CDAZ基本情報の取得 --------------------------
	HCDAZ		hcdaz,		// (I) CDAZハンドル
	PSZ		pszFileName,	// (O) オリジナルファイル名	NULL可
	PSZ		pszCdTitle,	// (O) CDタイトル		NULL可
	PSZ		pszDefTitle,	// (O) 省略時ｽﾄﾘｰﾑﾀｲﾄﾙ接頭語	NULL可
	LPDWORD		lpdwFlags,	// (O) CDAZフラグ	PLBCDAZ_XXXX
	LPDWORD		lpnAnaSector);	// (O) 探索完了セクタ		NULL可


#define PLBCDAZ_NOPRIORITY	0x01	// プラグイン優先順位無視


CEXPORT	BOOL	PlbSetCDAZInfo(	// CDAZ基本情報の設定 --------------------------
	HCDAZ		hcdaz,		// (I) CDAZハンドル
	LPCTSTR		lpCdTitle,	// (I) CDタイトル		NULL可
	LPCTSTR		lpDefTitle,	// (I) 省略時ｽﾄﾘｰﾑﾀｲﾄﾙ接頭語	NULL可
	DWORD		dwMask,		// (I) CDAZフラグマスク	PLBCDAZ_XXXX
	DWORD		dwFlags);	// (I) CDAZフラグ	PLBCDAZ_XXXX


				// CDAZ探索完了セクタの設定 --------------------
CEXPORT	BOOL	PlbSetCDAZAnaSector(
	HCDAZ		hcdaz,		// (I) CDAZハンドル
	DWORD		nAnaSector);	// (I) 探索完了セクタ


CEXPORT	BOOL	PlbGetCDAZStream( // CDAZストリーム情報の取得 ------------------
	HCDAZ		hcdaz,		// (I) CDAZハンドル
	INT		iStream,	// (I) ストリームインデックス	0base
	LPPSRSTREAMINFO	pstrInfo,	// (O) ストリームデータ情報	NULL可
	PSZ		pszTitle,	// (O) ストリームタイトル	NULL可
	PUINT		puiFlags,	// (O) ストリームフラグ		NULL可
	PINT		piPlugin);	// (O) プラグイン番号		NULL可


CEXPORT	BOOL	PlbSetCDAZStream( // CDAZストリーム情報の設定 ------------------
	HCDAZ		hcdaz,		// (I) CDAZハンドル
	INT		iStream,	// (I) ストリームインデックス	0base
	LPPSRSTREAMINFO	pstrInfo,	// (I) ストリームデータ情報	NULL可
	LPCTSTR		lpTitle,	// (I) ストリームタイトル	NULL可
	UINT		uiMask,		// (I) ストリームフラグマスク
	UINT		uiFlags);	// (I) ストリームフラグ


				// ストリームフラグ ----------------------------
#define PLBCDAZFLAG_NOUSED	0x01	// ストリーム未使用
#define PLBCDAZFLAG_USERMASK	0x07	// ユーザ指定フラグマスク

#define PLBCDAZFLAG_NOPLUGIN	0x10	// プラグインがない
#define PLBCDAZFLAG_OLDPLUGIN	0x20	// 処理不能旧プラグイン
#define PLBCDAZFLAG_DUPLICATE	0x40	// 重複隠しストリーム
#define PLBCDAZFLAG_NOSUPPORT	0x80	// 非サポートのストリーム	20011231
#define PLBCDAZFLAG_SYSTEMMASK	0xf8	// システム指定フラグマスク



CEXPORT	BOOL	PlbGetCDAZPlugin(// CDAZプラグイン情報の取得 -------------------
	HCDAZ		hcdaz,		// (I) CDAZハンドル
	INT		iPlugin,	// (I) プラグインインデックス	0base
	PSZ		pszFileName,	// (O) プラグインファイル名	NULL可
	PSZ		pszName,	// (O) プラグイン名		NULL可
	PUSHORT		pusVersion,	// (O) プラグインバージョン	NULL可
	PSZ		pszSite,	// (O) サイト名			NULL可
	PSZ		pszUrl);	// (O) サイトURL		NULL可


				// CDAZプラグイン優先順位の設定 ----------------
CEXPORT BOOL	PlbSetCDAZPluginPriority(
	HCDAZ		hcdaz,		// (I) CDAZハンドル
	INT		iPlugin,	// (I) プラグインインデックス	0base
	INT		iPriority);	// (I) 新しい優先順位		0base


				// CDAZプラグイン優先順位の設定(一括指定) ------
CEXPORT BOOL	PlbSetCDAZPluginPriAll(
	HCDAZ		hcdaz,		// (I) CDAZハンドル
	INT		iNum,		// (I) 設定プラグイン数
	PINT		piPlugins);	// (I) 新しい優先順位
					//	添字 : 現在のプラグイン優先順位
					//	値   : 新しいプラグイン優先順位


				// CDAZプラグインフラグの設定 ------------------
CEXPORT DWORD	PlbSetCDAZPluginFlags(
	HCDAZ		hcdaz,		// (I) CDAZハンドル
	INT		iPlugin,	// (I) プラグインインデックス	0base
	DWORD		dwfMask,	// (I) 設定マスク	PLBCDAZPLUGIN_XX
	DWORD		dwfFlags);	// (I) 設定フラグ	PLBCDAZPLUGIN_XX

#define PLBCDAZPLUGIN_NOUSED	0x01	// プラグイン未使用




/******************************************************************************/
/*									      */
/*	ストリーム解析機能						      */
/*									      */
/******************************************************************************/


CEXPORT	HCDAZ	PlbAnalyzeCd(	// CD解析 --------------------------------------
	HWND		hWnd);		// (I) ウインドウハンドル


CEXPORT	BOOL	PlbAnalyzeFile(	// ファイル解析 --------------------------------
	HWND		hWnd,		// (I) ウインドウハンドル
	LPCTSTR		lpStreamFile,	// (I) ストリームファイル名
	LPPSRSTREAMINFO	lpStreamInfo,	// (O) ストリームデータ情報
	PSZ		pszPlugin);	// (O) プラグインファイル名
typedef BOOL	(*PFNPlbAnaluzeFile)(HWND, LPCTSTR, LPPSRSTREAMINFO, PSZ);


				// プラグイン情報パネル(CD-ROM用) --------------
CEXPORT BOOL	PlbPluginInfoCd(
	HWND		hWnd,		// (I) ウインドウハンドル
	HCDAZ		hcdaz,		// (I) CDAZハンドル
	INT		iStream);	// (I) CDAZストリームインデックス


				// プラグイン選択パネル(FILE用) ----------------
CEXPORT BOOL	PlbSelectPluginFile(
	HWND		hWnd,		// (I) ウインドウハンドル
	LPCTSTR		lpStreamFile,	// (I) ストリームファイル名
	LPPSRSTREAMINFO	lpStreamInfo,	// (B) ストリームデータ情報
	PSZ		pszPlugin);	// (B) プラグインファイル名



/******************************************************************************/
/*									      */
/*	ストリームプレイヤー機能					      */
/*									      */
/******************************************************************************/


#define HPLAYER		HANDLE


			// ストリームプレイヤーのオープン ----------------------
CEXPORT HPLAYER	PlbOpenPlayer(
	LPCTSTR		lpPlugin,	// (I) プラグインファイル名
	LPCTSTR		lpStreamFile,	// (I) ストリームファイル名	NULL=CD
	LPPSRSTREAMINFO	lpStreamInfo,	// (I) ストリーム情報
	HWND		hWnd,		// (I) ウインドウ 	NULL:動画なし
	HWND		hWndNotice,	// (I) 通知ウインドウ	NULL:通知なし
	DWORD		dwProgress,	// (I) 位置通知周期	1/1000秒
	INT		iStretch);	// (I) 伸張画質レベル	LBR_STRETCHLEVEL
typedef HPLAYER	(*PFNPlbOpenPlayer)(LPCTSTR, LPCTSTR, LPPSRSTREAMINFO,
							HWND, HWND, DWORD, INT);


			// ストリームプレイヤーのクローズ ----------------------
CEXPORT BOOL	PlbClosePlayer(
	HPLAYER		hPlayer);	// (I) プレイヤーハンドル
typedef BOOL	(*PFNPlbClosePlayer)(HPLAYER);


			// ストリームの再生開始 --------------------------------
CEXPORT BOOL 	PlbPlayPlayer(
	HPLAYER		hPlayer);	// (I) プレイヤーハンドル
typedef BOOL	(*PFNPlbPlayPlayer)(HPLAYER);


			// ストリームの再生停止 --------------------------------
CEXPORT BOOL 	PlbStopPlayer(
	HPLAYER		hPlayer);	// (I) プレイヤーハンドル
typedef BOOL	(*PFNPlbStopPlayer)(HPLAYER);


			// ストリームの一時停止 --------------------------------
CEXPORT BOOL 	PlbPausePlayer(
	HPLAYER		hPlayer);	// (I) プレイヤーハンドル
typedef BOOL	(*PFNPlbPausePlayer)(HPLAYER);


			// ストリームの一時停止解除 ----------------------------
CEXPORT BOOL 	PlbResumPlayer(
	HPLAYER		hPlayer);	// (I) プレイヤーハンドル
typedef BOOL	(*PFNPlbResumPlayer)(HPLAYER);


			// ストリームの再生開始位置移動 ------------------------
CEXPORT BOOL 	PlbSeekPlayer(
	HPLAYER		hPlayer,	// (I) プレイヤーハンドル
	DWORD		dwPos);		// (I) 再生開始位置 1/1000秒単位
typedef BOOL	(*PFNPlbSeekPlayer)(HPLAYER, DWORD);


			// 動画再生矩形の取得 ----------------------------------
CEXPORT INT 	PlbGetPlayRect(
	HPLAYER		hPlayer,	// (I) プレイヤーハンドル
	LPRECT		prcMovie);	// (O) 動画再生矩形
typedef INT	(*PFNPlbGetPlayRect)(HPLAYER, LPRECT);


			// 動画再生矩形の設定 ----------------------------------
CEXPORT BOOL	PlbSetPlayRect(
	HPLAYER		hPlayer,	// (I) プレイヤーハンドル
	LPRECT		prcMovie,	// (I) 動画再生矩形		NULL可
	INT		iStretchLevel);	// (I) 伸長レベル LBR_STRETCHLEVELXXX
					//				-1可
typedef BOOL	(*PFNPlbSetPlayRect)(HPLAYER, LPRECT, INT);


			// プレイヤーの状態取得 --------------------------------
CEXPORT DWORD 	PlbGetPlayerStatus(
	HPLAYER		hPlayer);	// (I) プレイヤーハンドル
typedef DWORD	(*PFNPlbGetPlayerStatus)(HPLAYER);


enum {			// プレイヤーの状態 ------------------------------------
	PLAYSTAT_CLOSE,		// クローズ
	PLAYSTAT_STOP,		// 停止中
	PLAYSTAT_PAUSE,		// 一時停止中
	PLAYSTAT_PLAY,		// 再生中
	PLAYSTAT_EOD,		// End Of Data
	PLAYSTAT_EXIT		// Error EXIT
};


			// ストリーム再生位置の取得 ----------------------------
CEXPORT DWORD	PlbGetPlayPosition(
	HPLAYER		hPlayer,	// (I) プレイヤーハンドル
	LPDWORD		pdwAll);	// (O) 全長	1/1000秒単位	NULL可
typedef DWORD	(*PFNPlbGetPlayPosition)(HPLAYER, LPDWORD);


#define PSPWM_NOTIFY		(WM_APP+600)
				// wParam : PSP_NOTIFY_xxxxx
				// lParam : 付加情報


			// 通知コード ------------------------------------------
#define PSP_NOTIFY_EOD		1	// LPARAM : なし
#define PSP_NOTIFY_PROGRESS	2	// LPARAM : 現在位置 1/1000秒
#define PSP_NOTIFY_CONVBEGIN	3	// LPARAM : 全処理値
#define PSP_NOTIFY_CONVEND	4	// LPARAM : (CONVHANDLE)
#define PSP_NOTIFY_CONVPROG	5	// LPARAM : 処理済み値
#define PSP_NOTIFY_CONVBITMAP	6	// LPARAM : (LPBITMAPINFO)


#define PSPWM_CONVERROR		(WM_APP+601)
				// wParam : PSP_CERR_XXXX
				// lParam : (PSZ)付加エラーメッセージ

			// エラーコード ----------------------------------------
#define PSP_CERR_NO_ERROR		0
#define PSP_CERR_NOT_ENOUGH_MEMORY	1	// メモリ不足
#define PSP_CERR_CAN_NOT_OPEN_STREAM	2	// ストリームオープン不能
#define PSP_CERR_CAN_NOT_EXEC_THREAD	3	// 変換スレッド起動不能
#define PSP_CERR_GET_STREAM_INFO	4	// ストリーム情報取得不能
#define PSP_CERR_NO_FRAME		5	// フレームがない(AVI変換時)
#define PSP_CERR_CREATE_AVI_FILE	6	// AVIファイル作成不能
#define PSP_CERR_CREATE_WAVE_FILE	7	// WAVEファイル作成不能
#define PSP_CERR_CREATE_VIDEO_STREAM	8	// ビデオストリーム作成不能
#define PSP_CERR_CREATE_AUDIO_STREAM	9	// オーディオストリーム作成不能
#define PSP_CERR_CREATE_CSTR_FILE	10	// CSTRファイル作成不能
#define PSP_CERR_CREATE_STR_FILE	11	// STRファイル作成不能
#define PSP_CERR_CREATE_BITMAP_FILE	12	// BITMAPファイル作成不能
#define PSP_CERR_CREATE_MIDI_FILE	13	// MIDIファイル作成不能
#define PSR_CERR_PLUGIN_LICENSE		14	// プラグインライセンス違反 20040504

#define PSP_CERR_GOGO_NOT_FOUND		20	// GOGO.DLLが見つからない
#define PSP_CERR_GOGO_PROC_ADDRESS	21	// 関数アドレス取得エラー
#define PSP_CERR_GOGO_ERR_OFFSET	30	// GOGO.DLLエラーオフセット



#define PSPWM_PLAYPOS		(WM_APP+602)
				// wParam : フレーム番号
				// lParam : 現在位置	1/1000秒


			// 動画DIBのロック -------------------------------------
CEXPORT LPBITMAPINFO PlbLockFrameDIB(
	HPLAYER		hPlayer,	// (I) プレイヤーハンドル
	LPDWORD		lpnFrameNo);	// (O) フレーム番号		NULL可
typedef LPBITMAPINFO	(*PFNPlbLockFrameDIB)(HPLAYER, LPDWORD);


			// 動画DIBのアンロック ---------------------------------
CEXPORT VOID	PlbUnlockFrameDIB(
	HPLAYER		hPlayer);	// (I) プレイヤーハンドル
typedef VOID	(*PFNPlbUnlockFrameDIB)(HPLAYER);


			// ボリュームの設定 ------------------------------------
CEXPORT	BOOL	PlbSetVolume(
	HPLAYER		hPlayer,	// (I) プレイヤーハンドル	NULL:Dev
	DWORD		dwVolume);	// (I) ボリューム
typedef BOOL	(*PFNPlbSetVolume)(HPLAYER, DWORD);


			// 再生テンポの設定 --------------------------- 20030703
CEXPORT BOOL	PlbSetTempo(
	HPLAYER		hPlayer,	// (I) プレイヤーハンドル	NULL:Dev
	DWORD		dwTempo);	// (I) 再生テンポ 	0 〜 200
typedef BOOL	(*PFNPlbSetTempo)(HPLAYER, DWORD);



/******************************************************************************/
/*									      */
/*	プレイヤー補助機能						      */
/*									      */
/******************************************************************************/


			// プレイヤーステータスバーの作成 ----------------------
CEXPORT HWND	PlbCreatePlayerStatusBar(
	HWND		hwndParent);	// (I) 親ウインドウハンドル


				// プレイヤーステータスバーのクリア - - - - - -
#define PLBWM_PSB_CLEAR		(WM_APP+620)

				// ストリームの設定 - - - - - - - - - - - - - -
#define PLBWM_PSB_SETSTREAM	(WM_APP+621)
					// LOWORD(wParam) : チャンネル数
					// HIWORD(wParam) : フレーム数
					// lParam : 再生時間 (1/1000秒)

				// 現フレーム番号の設定 - - - - - - - - - - - -
#define PLBWM_PSB_SETFRAME	(WM_APP+622)
					// wParam : フレーム番号

				// 現時間の設定 - - - - - - - - - - - - - - - -
#define PLBWM_PSB_SETTIME	(WM_APP+623)
					// wParam : 現時間 (1/1000秒)


enum {
	PLB_PLAYSTA_FRAME,		// フレーム番号
	PLB_PLAYSTA_TIME,		// 時間
	PLB_PLAYSTA_AUDIO,		// オーディオチャンネル
	NumPLAYSTA
};


			// フレーム表示ウインドウプロシージャ ------------------
CEXPORT HWND	PlbCreateFrameView(
	HINSTANCE	hInst,		// (I) インスタンスハンドル
	HWND		hwndParent,	// (I) 親ウインドウハンドル
	LPPOINT		ppt,		// (I) ウインドウ位置		NULL可
	LPSIZE		psz);		// (I) ウインドウサイズ		NULL可


				// プレイヤーの設定 - - - - - - - - - - - - - -
#define PLBWM_VW_SETPLAYER	(WM_APP+630)
					// wParam : プレイヤーハンドル

				// 通知先ウインドウの設定 - - - - - - - - 030705
#define PLBWM_VW_SETNOTICEHWND	(WM_APP+638)
					// wParam : 通知先ウインドウハンドル


				// マウス関連転送メッセージ - - - - - - - - - -
#define PLBWM_VW_LBUTTONDOWN	(WM_APP+631)
#define PLBWM_VW_RBUTTONDOWN	(WM_APP+632)
#define PLBWM_VW_LBUTTONUP	(WM_APP+633)
#define PLBWM_VW_RBUTTONUP	(WM_APP+634)
#define PLBWM_VW_MOUSEMOVE	(WM_APP+635)
#define PLBWM_VW_SIZE		(WM_APP+636)
#define PLBWM_VW_GETBITMAP	(WM_APP+637)
#define PLBWM_VW_MOVE		(WM_APP+638)				//030705
#define PLBWM_VW_CLOSE		(WM_APP+639)				//030705


			// プレイヤーコントロールの作成-------------------------
CEXPORT HWND	PlbCreatePlayControl(
	HWND		hwndParent);	// (I) 親ウインドウハンドル


enum {				// 再生モード - - - - - - - - - - - - - - - - -
	PLB_PLAYMODE_NORMAL,		// 通常再生
	PLB_PLAYMODE_ENDRESS,		// 繰返し再生
	PLB_PLAYMODE_ALL,		// 全ストリーム再生
	NumPLAYMODE
};


enum {				// プレイヤー状態 と ボタン - - - - - - - - - -
	PLB_PLAYCTL_PLAYPAUSE,		// [ > ‖]
	PLB_PLAYCTL_PLAY,		// [ > ]	<状態>
	PLB_PLAYCTL_PAUSE,		// [ ‖ ]	<状態>
	PLB_PLAYCTL_STOP,		// [ ■ ]	<状態>
	PLB_PLAYCTL_BEFORE,		// [ |<< ]
	PLB_PLAYCTL_REWIND,		// [ << ]
	PLB_PLAYCTL_FORWARD,		// [ >> ]
	PLB_PLAYCTL_NEXT,		// [ >>| ]
	PLB_PLAYCTL_STEPBAK,		// [ <■ ]
	PLB_PLAYCTL_STEPFWD,		// [ ■> ]
	PLB_PLAYCTL_PLAYMODE,		// 再生モード
	PLB_PLAYCTL_VOLUME,		// ボリュームスライダ
	PLB_PLAYCTL_SEEK,		// シークスライダ
	NumPLAYCTL
};


				// 再生モードの設定 - - - - - - - - - - - - - -
#define PLBWM_PC_SETPLAYMODE	(WM_APP+640)
					// wParam : PLB_PLAYMODE_XXXX

#define PlbPcSETPLAYMODE(Mhdlg, Mmode)	\
	SendMessage(Mhdlg, PLBWM_PC_SETPLAYMODE, (WPARAM)(Mmode), 0)


				// 再生モードの取得 - - - - - - - - - - - - - -
#define PLBWM_PC_GETPLAYMODE	(WM_APP+641)

#define PlbPcGETPLAYMODE(Mhdlg)	\
	SendMessage(Mhdlg, PLBWM_PC_GETPLAYMODE, 0, 0)


				// プレイヤー状態の設定 - - - - - - - - - - - -
#define PLBWM_PC_SETSTATUS	(WM_APP+642)
					// wParam : PLB_PLAYCTL_XXXX

#define PlbPcSETSTATUS(Mhdlg, Mstatus)	\
	SendMessage(Mhdlg, PLBWM_PC_SETSTATUS, (WPARAM)(Mstatus), 0)


				// プレイヤー状態の取得 - - - - - - - - - - - -
#define PLBWM_PC_GETSTATUS	(WM_APP+643)

#define PlbPcGETSTATUS(Mhdlg)	\
	SendMessage(Mhdlg, PLBWM_PC_GETSTATUS, 0, 0)


				// メディア長の設定 - - - - - - - - - - - - - -
#define PLBWM_PC_SETPLAYLENGTH	(WM_APP+644)
					// wParam : メディア長	1/1000sec
					// lParam : 単位長	1/1000sec

#define PlbPcSETPLAYLENGTH(Mhdlg, Mlength, Munit)	\
	SendMessage(Mhdlg, PLBWM_PC_SETPLAYLENGTH, (WPARAM)(Mlength), (LPARAM)(Munit))


				// メディア長の取得 - - - - - - - - - - - - - -
#define PLBWM_PC_GETPLAYLENGTH	(WM_APP+645)

#define PlbPcGETPLAYLENGTH(Mhdlg)	\
	(DWORD)SendMessage(Mhdlg, PLBWM_PC_GETPLAYLENGTH, 0, 0)


				// 再生位置の設定 - - - - - - - - - - - - - - -
#define PLBWM_PC_SETPLAYPOS	(WM_APP+646)
					// wParam : 再生位置	1/1000sec

#define PlbPcSETPLAYPOS(Mhdlg, Mpos)	\
	SendMessage(Mhdlg, PLBWM_PC_SETPLAYPOS, (WPARAM)(Mpos), 0)


				// 再生位置の取得 - - - - - - - - - - - - - - -
#define PLBWM_PC_GETPLAYPOS	(WM_APP+647)

#define PlbPcGETPLAYPOS(Mhdlg)	\
	(DWORD)SendMessage(Mhdlg, PLBWM_PC_GETPLAYPOS, 0, 0)


				// ボリュームの設定 - - - - - - - - - - - - - -
#define PLBWM_PC_SETVOLUME	(WM_APP+648)
					// wParam : ボリューム

#define PlbPcSETVOLUME(Mhdlg, Mvolume)	\
	SendMessage(Mhdlg, PLBWM_PC_SETVOLUME, (WPARAM)(Mvolume), 0)


				// ボリュームの取得 - - - - - - - - - - - - - -
#define PLBWM_PC_GETVOLUME	(WM_APP+649)

#define PlbPcGETVOLUME(Mhdlg)	\
	SendMessage(Mhdlg, PLBWM_PC_GETVOLUME, 0, 0)


				// コントロールハンドルの取得 - - - - - - - - -
#define PLBWM_PC_GETHANDLE	(WM_APP+650)
					// wParam : PLB_PLAYCTL_XXXX

#define PlbPcGETHANDLE(Mhdlg, Mctrl)	\
	(HWND)SendMessage(Mhdlg, PLBWM_PC_GETHANDLE, (WPARAM)(Mctrl), 0)


				// プレイヤーコマンド通知 - - - - - - - - - - -
#define PLBWM_PC_COMMAND	(WM_APP+651)
					// wParam : PLB_PLAYCTL_XXXX
					// lParam : コマンド詳細情報


				// ツールチップ文字列の要求 - - - - - - - - - -
#define PLBWM_TOOLTIP_STRING	(WM_APP+652)
					// wParam : LOWORD : ウインドウタイプ
					//	PLB_WINDOW_XXXX
					// wParam : HIWORD : コントロール
					//	PLB_PLAYCTL_XXX etc...
					// lParam : 文字列バッファ

enum {
	PLB_WINDOW_PLAYSTAT,	// プレイヤーステータスバー
	PLB_WINDOW_PLAYCTRL,	// プレイヤーコントローラ
	NumWINDOWTYPE
};


#define PLB_TOOLTIP_DEFAULT	"+++ TOOLTIP DEFAULT +++"




/******************************************************************************/
/*									      */
/*	変換機能							      */
/*									      */
/******************************************************************************/

#ifndef _INC_VFW
#include <Vfw.h>
#endif

typedef BOOL (CALLBACK *PFNCONV)(DWORD, DWORD, LONG);


typedef struct {	// 圧縮オプション情報 ----------------------------------
	DWORD		dwQuality;
	DWORD		dwKeyFrameEvery;
	DWORD		dwBytesPerSecond;
	CHAR		aDescription[256];
	CHAR		aName[32];
} PLBCOMPRESS, *LPPLBCOMPRESS;


			// 圧縮オプション設定パネル ----------------------------
CEXPORT BOOL	PlbSetAVIOption(
	HWND		hWndParent,	// (I) 親ウインドウ
	LPAVICOMPRESSOPTIONS popt);	// (B) 圧縮オプション


			// 圧縮オプション情報の取得 ----------------------------
CEXPORT BOOL	PlbGetAVIOptionInfo(
	LPAVICOMPRESSOPTIONS popt,	// (I) 圧縮オプション
	LPPLBCOMPRESS	lpCompress);	// (O) 圧縮オプション情報


typedef struct {	// AVI変換 ---------------------------------------------
	CHAR		aFile[_MAX_PATH];
	SIZE		szFrame;
	WORD		wFrameRate;
	WORD		wStretch;	// 変倍品質	LBR_STRETCHLEVEL_XXX
	BOOL		fAudio;
	WORD		wChannels;
	WORD		wBitsPerSample;
	DWORD		nSamplingRate;
	AVICOMPRESSOPTIONS opt;
} PLBCONVAVI, *LPPLBCONVAVI;


CEXPORT	DWORD	PlbConvertAVI(
	LPCTSTR		lpPlugin,	// (I) プラグインファイル名
	LPCTSTR		lpStreamFile,	// (I) ストリームファイル名	NULL=CD
	LPPSRSTREAMINFO	lpStreamInfo,	// (I) ストリーム情報
	LPPLBCONVAVI	lpAvi,		// (I) AVI変換情報
	PFNCONV		pfnNotify,	// (I) 進捗状況通知関数
	LONG		lParam);	// (I) APパラメータ


typedef struct {	// WAVE変換 --------------------------------------------
	CHAR		aFile[_MAX_PATH];
	WORD		wFormatTag;
	WORD		wChannels;
	WORD		wBitsPerSample;
	DWORD		nSamplingRate;
} PLBCONVWAVE, *LPPLBCONVWAVE;



CEXPORT DWORD	PlbConvertWAVE(
	LPCTSTR		lpPlugin,	// (I) プラグインファイル名
	LPCTSTR		lpStreamFile,	// (I) ストリームファイル名	NULL=CD
	LPPSRSTREAMINFO	lpStreamInfo,	// (I) ストリーム情報
	LPPLBCONVWAVE	lpWave,		// (I) WAVE変換情報
	PFNCONV		pfnNotify,	// (I) 進捗状況通知関数
	LONG		lParam);	// (I) APパラメータ


typedef struct {	// CSTR変換 --------------------------------------------
	CHAR		aFile[_MAX_PATH];
} PLBCONVCSTR, *LPPLBCONVCSTR;


CEXPORT DWORD	PlbConvertCSTR(
	LPCTSTR		lpPlugin,	// (I) プラグインファイル名
	LPCTSTR		lpStreamFile,	// (I) ストリームファイル名	NULL=CD
	LPPSRSTREAMINFO	lpStreamInfo,	// (I) ストリーム情報
	LPPLBCONVCSTR	lpCStr,		// (I) CSTR変換情報
	PFNCONV		pfnNotify,	// (I) 進捗状況通知関数
	LONG		lParam);	// (I) APパラメータ


typedef struct {	// BMP変換 ---------------------------------------------
	CHAR		aFile[_MAX_PATH];
	SIZE		szFrame;
} PLBCONVBITMAP, *LPPLBCONVBITMAP;


CEXPORT DWORD	PlbConvertBITMAP(
	LPCTSTR		lpPlugin,	// (I) プラグインファイル名
	LPCTSTR		lpStreamFile,	// (I) ストリームファイル名	NULL=CD
	LPPSRSTREAMINFO	lpStreamInfo,	// (I) ストリーム情報
	LPPLBCONVBITMAP	lpBmp,		// (I) BITMAP変換情報
	PFNCONV		pfnNotify,	// (I) 進捗状況通知関数
	LONG		lParam);	// (I) APパラメータ


typedef struct {	// MIDI変換 --------------------------------------------
	CHAR		aFile[_MAX_PATH];
} PLBCONVMIDI, *LPPLBCONVMIDI;


CEXPORT DWORD	PlbConvertMIDI(
	LPCTSTR		lpPlugin,	// (I) プラグインファイル名
	LPCTSTR		lpStreamFile,	// (I) ストリームファイル名	NULL=CD
	LPPSRSTREAMINFO	lpStreamInfo,	// (I) ストリーム情報
	LPPLBCONVMIDI	lpMidi,		// (I) MIDI変換情報
	PFNCONV		pfnNotify,	// (I) 進捗状況通知関数
	LONG		lParam);	// (I) APパラメータ


#ifndef PSXMP_FREE
typedef struct {	// MP3変換(GOGO.DLL) -----------------------------------
	CHAR		aFile[_MAX_PATH];
	WORD		wBitRate;	// ビットレート
					//	0x4xxx : VBR .. VBRクオリティ
					//	0x0xxx : 固定ビットレート
	WORD		wOutputFormat;	// 出力フォーマット 	MC_OUTPUT_XXX
					//	出力MP3データを覆うフォーマット
					//	を設定します。 
	WORD		wEncodeMode;	// エンコードモード	MC_MODE_XXX
	WORD		wFlags;		// フラグ		Mp3FlagsXXX
	WORD		wEnhancedFilterA; // カスタマイズ拡張フィルタの設定 
	WORD		wEnhancedFilterB; //  
			// ユーザー側で詳細なローパスフィルターを施します。
			// バンド幅は[0-1]の間で正規化されます。
			//	周波数帯域 0〜A の間はフィルタが施されません 
			//	周波数帯域 A〜B の間は、
			//		なだらかな曲線を描く様にフィルタの
			//		強度が増します 
			//	周波数帯域 B〜1 の間は、完全に遮断します 
			// 実際は入出力PCMの標本化周波数によって遮蔽周波数は
			//	変化します。
			// dwPara1には、帯域Aの値を設定します。 0〜100 
			// dwPara2には、帯域Bの値を設定します。 0〜100 
			// このパラメーターを設定すると、"固定16kbpsフィルタ"の
			//	設定は無視されるようになります。
			// ＶＢＲエンコード時、この設定パラメタは無視されます。
	WORD		wVbrBitRateMin;	// ＶＢＲ変動幅の制限 
	WORD		wVbrBitRateMax;	// VBRエンコード時の変動幅を制限します。
			// 最低ビットレートをkbps単位で指定します。 
			// 最高ビットレートをkbps単位で指定します。 
			// VBRクオリティと併用して設定してください。 
	WORD		wEmphasis;	// エンファシスタイプ	MC_EMP_XXX
} PLBCONVGOGO, *LPPLBCONVGOGO;

#define Mp3FlagsUSEPSY		0x0001	// 処理過程で音響心理解析の利用する
#define Mp3FlagsUSELPF16	0x0002	// 16KHz低帯域フィルタ
#define Mp3FlagsCPUMMX		0x0010	// MMX拡張命令
#define Mp3FlagsCPU3DNOW	0x0020	// 3D Now!拡張命令
#define Mp3FlagsCPUKNI		0x0040	// SSE-SIMD拡張命令
#define Mp3FlagsCPUE3DNOW	0x0080	// 拡張#d Now!拡張命令
#define Mp3FlagsVBRBITRATE	0x0100	// VBR変動幅の制限
#define Mp3FlagsENHANCEDFILTER	0x0200	// カスタマイズ拡張フィルタ


CEXPORT DWORD	PlbConvertGOGO(
	LPCTSTR		lpPlugin,	// (I) プラグインファイル名
	LPCTSTR		lpStreamFile,	// (I) ストリームファイル名	NULL=CD
	LPPSRSTREAMINFO	lpStreamInfo,	// (I) ストリーム情報
	LPPLBCONVGOGO	lpGogo,		// (I) GOGO(MP3)変換情報
	PFNCONV		pfnNotify,	// (I) 進捗状況通知関数
	LONG		lParam);	// (I) APパラメータ


CEXPORT ULONG	PlbIsGogo(
	PULONG		pulVersion,	// (O) バージョンコード		NULL可
	PSZ		pszVersion);	// (O) バージョン文字列		NULL可

#define UNITSTAT_FPU		(1<<0)	// x86互換FPU 
#define UNITSTAT_MMX		(1<<1)	// IA-MMX 
#define UNITSTAT_3DN		(1<<2)	// 3DNow! 
#define UNITSTAT_SSE		(1<<3)	// SSE(KNI) 
#define UNITSTAT_CMOV		(1<<4)	// cMOV命令 
#define UNITSTAT_E3DN		(1<<5)	// Athlon Enhanced 3DNow!/AMDMMX 
#define UNITSTAT_EMMX		(1<<6)	// EnhandecMMX 
#define UNITSTAT_INTEL		(1<<8)	// INTEL CPU 
#define UNITSTAT_AMD		(1<<9)	// AMD CPU 
#define UNITSTAT_CYRIX		(1<<10)	// Cylix CPU 
#define UNITSTAT_IDT		(1<<11)	// IDT CPU 
#define UNITSTAT_GOGODLL	(1<<14)	// GOGO.DLL利用可
#define UNITSTAT_UNKNOWN	(1<<15)	// No Vendor 

#endif


			// BMPファイルへの保存 ---------------------------------
CEXPORT	BOOL	PlbSaveBitmap(
	LPBITMAPINFO	pbmi,		// (I) DBIビットマップ
	LPCTSTR		lpFileName);	// (I) ビットマップファイル名




/******************************************************************************/
/*									      */
/*	ライセンス管理							      */
/*									      */
/******************************************************************************/

#define MagicLICENSE		0x47d03a3c
#define SizeLICENSECODE		30	// ライセンスコード長
#define MaxUSERID		128	// ユーザ文字数(最大)
#define MaxPRODUCTNAME		256	// プロダクト名文字数(最大)
#define MaxPRODUCTMARK		64	// プロダクト記号文字数(最大)


enum {
	LicStatusTRIAL,			// 試用期間中
	LicStatusEXPIRATION,		// 試用期間満了
	LicStatusINVALIDTRIAL,		// 試用期間情報不正
	LicStatusREGISTERED,		// 登録済み
	LicStatusINVALID,		// 登録情報不正
	LicStatusERROR,			// ライセンス情報不良
	NumLICSTATUS
};

enum {
	LicCheckNONE,			// 試用期間満了 or 情報不正
	LicCheckREGIST,			// 正規登録
	LicCheckINVALID,		// 不正登録
	NumLICCHECK
};

typedef struct {		// レジスト情報 --------------------------------
	CHAR	aCode[SizeLICENSECODE+2]; // ライセンスコード
	CHAR	aUserID[MaxUSERID+2];	// ユーザID
	DWORD	dwRegistDate;		// 登録日 yyyymmdd
	INT	iCheck;			// ライセンスチェック結果
} PLBREGISTINFO, *LPPLBREGISTINFO;


typedef struct {		// トライアル情報 ------------------------------
	INT	iDays;			// 試用期限日数
	DWORD	dwBeginDate;		// 試用開始日 yyyymmdd
} PLBTRIALINFO, *LPPLBTRIALINFO;


typedef struct {		// ライセンス情報 ------------------------------
	ULONG		ulMagic;	// マジックNO		MagicLICENSE
	INT		iStatus;	// ライセンス状態	LicStatusXXXX
	CHAR		aProduct[MaxPRODUCTNAME+2];	// プロダクト名
	CHAR		aMark[MaxPRODUCTMARK+2];	// プロダクト記号
	union {
		PLBREGISTINFO	regist;		// レジスト情報
		PLBTRIALINFO	trial;		// トライアル情報
	} info;
} PLBLICENSE, *LPPLBLICENSE;


#ifndef PSXMP_FREE
CEXPORT	INT	PlbCheckLicense( // ライセンスチェック -------------------------
	PSZ		pszProduct,	// (I) プロダクト名
	PSZ		pszMark,	// (I) プロダクト記号	(3byte)
	INT		iTrialDays,	// (I) 試用日数
	LPPLBLICENSE	lpLicense);	// (O) ライセンス情報	NULL可


CEXPORT BOOL	PlbLicMessagePanel( // ライセンス通知パネル --------------------
	HWND		hwndParent,	// (I) 親ウインドウハンドル
	LPPLBLICENSE	lpLicense);	// (B) ライセンス情報


CEXPORT	BOOL	PlbRegistPanel(	// ライセンス登録パネル ------------------------
	HWND		hwndParent,	// (I) 親ウインドウハンドル
	LPPLBLICENSE	lpLicense);	// (B) ライセンス情報

				// システムライセンス情報の取得 ----------------
CEXPORT	INT	PlbGetSystemLicense(
	LPPLBLICENSE	lpLicense);	// (O) ライセンス情報	NULL可

#endif
				// シェアウェア版チェック ----------------------
CEXPORT BOOL	PlbCheckSupport(
	DWORD		dwReserved);	// (I) 予約		0指定

				// ライセンス状態文字列取得 --------------------
CEXPORT INT	PlbGetLicenseStatString(
	LPPLBLICENSE	lpLicense,	// (I) ライセンス情報
	BOOL		fShortType,	// (I) 短いタイプ
	PSZ		pszStatus);	// (O) ライセンス状態文字列



/******************************************************************************/
/*									      */
/*	Webサービス機能							      */
/*									      */
/******************************************************************************/


typedef struct {		// CDAZファイルWeb検索結果 ---------------------
	CHAR		aLanguage[4];	// 言語記号	JPN or ENG
	USHORT		usSysVersion;	// システムバージョン
	USHORT		usCdazVersion;	// CDAZバージョン
	DWORD		dwAnalyzeVersion;	// 解析システムバージョン
	DWORD		dwSumPluginVersion;	// プラグインバージョン合計
	CHAR		aCdTitle[MaxCDTITLE+2]; // CDタイトル
	CHAR		aPublisherID[128+2];	// 出版者識別子
	DWORD		nPlugin;	// プラグイン数
	DWORD		nStream;	// ストリーム数
	DWORD		nEffStream;	// 有効ストリーム数
	DWORD		dwDate;		// 登録日付	YYYYMMDD
} PLBCDAZSEARCHRESULT, *LPPLBCDAZSEARCHRESULT;

#define MaxCDAZSEARCHRESULT	16	// CDAZファイルWeb検索結果最大件数


CEXPORT	BOOL	PlbUploadCDAZ(	// CDAZファイルのアップロード ------------------
	LPCTSTR		lpPath,		//I: パス			NULL可
	LPCTSTR		lpFile,		//I: CDAZファイル名		NULL可
	HCDAZ		hcdaz);		//I: CDAZハンドル


CEXPORT INT	PlbSearchCDAZ(	// CDAZファイルのWeb検索 -----------------------
	LPCTSTR		lpCdazName,	//I: CDAZファイル名
	LPPLBCDAZSEARCHRESULT	lpResult); //O: CDAZファイルWeb検索結果


				// CDAZファイルのダウンロード ------------------
CEXPORT	HCDAZ	PlbDownloadCDAZ(
	DWORD		dwCdazVer,	//I: CDAZバージョン
	LPCTSTR		lpLanguage,	//I: 言語記号
	LPCTSTR		lpFile);	//I: CDAZファイル名


/******************************************************************************/
/*									      */
/*	一般的補助機能							      */
/*									      */
/******************************************************************************/


				// パラメータリストの解析/取得 -----------------
CEXPORT INT	PlbGetParam(
	PSZ		pszLine,	// (I) パラメータ・ライン
	INT		iMax,		// (I) 最大パラメータ・リスト数
	PSZ		apszPrm[]);	// (O) パラメータ・リスト


				// リソース文字列のロード ----------------------
CEXPORT	PSZ	PlbLoadString(
	HINSTANCE	hinst,		// (I) インスタンス
	PSZ		pszString,	// (O) 文字列取得バッファ	NULL可
	INT		iString);	// (I) 文字リソースID


				// メッセージの表示 ----------------------------
CEXPORT INT	PlbMessage(
	HWND		hWnd,		// (I) 親ウインドウ
	UINT		uiStyle,	// (I) スタイル	(MB_XXX MessageBox)
	PSZ		pszTitle,	// (I) タイトル文字列
	PSZ		pszMsg, ...);	// (I) メッセージ文字列


				// エラーメッセージの表示 ----------------------
CEXPORT INT	PlbError(
	HWND		hWnd,		// (I) 親ウインドウ
	UINT		uiStyle,	// (I) スタイル	(0 = MB_OK)
	PSZ		pszMsg, ...);	// (I) メッセージ文字列


				// 警告メッセージの表示 ------------------------
CEXPORT INT	PlbWarning(
	HWND		hWnd,		// (I) 親ウインドウ
	UINT		uiStyle,	// (I) スタイル	(0 = MB_OK)
	PSZ		pszMsg, ...);	// (I) メッセージ文字列


				// 問い合わせメッセージの表示 ------------------
CEXPORT INT	PlbQuestion(
	HWND		hWnd,		// (I) 親ウインドウ
	UINT		uiStyle,	// (I) スタイル	(0 = MB_OK)
	PSZ		pszMsg, ...);	// (I) メッセージ文字列


				// 情報メッセージの表示 ------------------------
CEXPORT INT	PlbInformation(
	HWND		hWnd,		// (I) 親ウインドウ
	UINT		uiStyle,	// (I) スタイル	(0 = MB_OK)
	PSZ		pszMsg, ...);	// (I) メッセージ文字列


				// ダイアログアイテムへの文字設定 --------------
CEXPORT	VOID	PlbSetItemText(
	HWND		hDlg,		// (I) ダイアログ
	INT		iCtrlID,	// (I) コントロールID
	PSZ		pszText, ...);	// (I) 表示文字列


				// ダイアログアイテムへのサイズ文字設定 --------
CEXPORT VOID	PlbSetItemSizeText(
	HWND		hDlg,		// (I) ダイアログ
	INT		iCtrlID,	// (I) コントロールID
	DWORD		dwByte);	// (I) サイズ (byte)


				// タブページの配置 ----------------------------
CEXPORT	VOID	PlbSetTabPagePos(
	HWND		hwndPage,	// (I) タブページ・ウインドウ
	DWORD		dwPos);		// (I) 配置フラグ	PLBTPOS_XXXX


#define PLBTPOS_LEFT		0x00
#define PLBTPOS_RIGHT		0x01
#define PLBTPOS_CENTER		0x02
#define PLBTPOS_MASKHORZ	0x0f
#define PLBTPOS_TOP		0x00
#define PLBTPOS_BOTTOM		0x10
#define PLBTPOS_VCENTER		0x20
#define PLBTPOS_MASKVERT	0xf0
#define PLBTPOS_DEFAULT		(PLBTPOS_CENTER | PLBTPOS_BOTTOM)


				// リンクボタンの設定 --------------------------
				// リンクボタンはOWNERDRAWのボタンであること!
CEXPORT	BOOL	PlbSetLinkButton(
	HWND		hdlg,		// (I) ダイアログ
	INT		iCtrlID);	// (I) コントロールID

				// リンクボタンの描画 (WM_DRAWITEM処理) --------
CEXPORT	BOOL	PlbDrawLinkButton(
	LPDRAWITEMSTRUCT pdis);		// (I) オーナードロー情報


				// バージョン情報パネル ------------------------
typedef struct {
	PSZ		pszTitle;	// ダイアログタイトル
	PSZ		pszProduct;	// プロダクト
	PSZ		pszVersion;	// バージョン
	PSZ		pszCopyright;	// コピーライト
	PSZ		pszUrl;		// URL
	PSZ		pszEmail;	// E-Mail
	HICON		hIcon;		// アイコン
	LPPLBLICENSE	lpLicense;	// ライセンス情報	NULL可
} PLBABOUT, *LPPLBABOUT;

CEXPORT	VOID	PlbAboutPanel(
	HWND		hwndParent,	// 親ウインドウハンドル
	LPPLBABOUT	pAbout);	// バージョン情報


CEXPORT RECT	PlbGetItemRect(	// アイテム矩形の取得 --------------------------
	HWND		hdlg,		// (I) ダイアログ
	INT		iCtrlID);	// (I) コントロールID


CEXPORT HWND	PlbAddTooltip(	// ツールチップの追加 --------------------------
	HWND		hwndTip,	// (I) ツールチップウインドウ
					//	NULL : ウインドウを作成します。
	HINSTANCE	hinst,		// (I) 文字列リソースのあるインスタンス
					//	pszTextにリソースIDを指定
	HWND		hdlg,		// (I) ダイアログハンドル
	INT		iCtrlID,	// (I) コントロールID
	LPRECT		lpRect,		// (I) アイテム矩形		NULL可
	PSZ		pszText);	// (I) 文字列
					//	hinstを指定した場合はリソースID


CEXPORT BOOL	PlbDelTooltip(	// ツールチップの削除 --------------------------
	HWND		hwndTip,	// (I) ツールチップウインドウ
	HWND		hdlg,		// (I) ダイアログハンドル
	INT		iCtrlID);	// (I) コントロールID


CEXPORT	PSZ	PlbTooltipText(	// ツールチップ用テキストへの変換 --------------
	PSZ		pszText);	// (B) I:メニューアイテム文字列
					//     O:ツールチップ用文字列


				// プログレスの開始 ----------------------------
CEXPORT	HANDLE	PlbBeginProgress(
	ULONG		ulAllSize,	// (I) 全処理サイズ
	ULONG		ulMinUnit);	// (I) 最小単位サイズ


CEXPORT	VOID	PlbEndProgress(	// プログレスの終了 ----------------------------
	HANDLE		hProgress);	// (I) プログレスハンドル


CEXPORT	ULONG	PlbSetProgress(	// プログレス位置の設定 ------------------------
	HANDLE		hProgress,	// (I) プログレスハンドル
	ULONG		ulPosSize,	// (I) プログレス位置
	PULONG		pulTime);	// (O) 予測処理時間		NULL可

#endif
