#cs
#ifdef __cplusplus
extern "C" {
#endif

#ifndef SFXDEF
#define SFXDEF(f) WINAPI f
#endif

#ifndef HSFX
typedef	long HSFX;
#endif
#ce

;//visualization plugin types
Global Const $BASS_SFX_SONIQUE = 0
Global Const $BASS_SFX_WINAMP = 1
Global Const $BASS_SFX_WMP = 2
Global Const $BASS_SFX_BBP = 3

;// PluginCreate Flags
Global Const $BASS_SFX_SONIQUE_OPENGL					= 1 ;//render sonique plugins using OpenGL
Global Const $BASS_SFX_SONIQUE_OPENGL_DOUBLEBUFFER	= 2 ;//use OpenGL double buffering

;// Error codes returned by BASS_SFX_ErrorGetCode
Global Const $BASS_SFX_OK					= 0	;// all is OK
Global Const $BASS_SFX_ERROR_MEM			= 1	;// memory error
Global Const $BASS_SFX_ERROR_FILEOPEN		= 2	;// can't open the file
Global Const $BASS_SFX_ERROR_HANDLE		= 3	;// invalid handle
Global Const $BASS_SFX_ERROR_ALREADY		= 4	;// already initialized
Global Const $BASS_SFX_ERROR_FORMAT		= 5	;// unsupported plugin format
Global Const $BASS_SFX_ERROR_INIT			= 6	;// BASS_SFX_Init has not been successfully called
Global Const $BASS_SFX_ERROR_GUID			= 7	;// can't open WMP plugin using specified GUID
Global Const $BASS_SFX_ERROR_UNKNOWN		= -1	;// some other mystery problem

;// Windows Media Player Specific
;typedef struct{
;	const char* name;
;	const char* clsid;
;};
Global Const $tagBASS_SFX_PLUGININFO = "ptr name; ptr clsid;"

;typedef struct{
;	LPCWSTR name;
;	LPCWSTR clsid;
;}BASS_SFX_PLUGININFOW;
Global Const $BASS_SFX_PLUGININFOW = "ptr name; ptr clsid;"

Global $_ghBASS_SFXdll=-1

Func _BASS_SFX_Startup($sBassSFXDLL="bass_sfx.dll")
	; Author: Prog@ndy
	If $_ghBASS_SFXdll <> -1 Then Return True
	$_ghBASS_SFXdll = DllOpen($sBassSFXDLL)
	Return $_ghBASS_SFXdll <> -1
EndFunc

;~ BOOL		SFXDEF(BASS_SFX_WMP_GetPlugin)(int index, BASS_SFX_PLUGININFO* info);
Func _BASS_SFX_WMP_GetPlugin($iIndex, $pInfo)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_WMP_GetPlugin", "int", $iIndex, "ptr", $pInfo)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_WMP_GetPluginW)(int index, BASS_SFX_PLUGININFOW* info);
Func _BASS_SFX_WMP_GetPluginW($iIndex, $pInfo)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_WMP_GetPluginW", "int", $iIndex, "ptr", $pInfo)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc

;~ DWORD		SFXDEF(BASS_SFX_GetVersion)();
Func _BASS_SFX_GetVersion()
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "dword", "BASS_SFX_GetVersion")
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ DWORD		SFXDEF(BASS_SFX_ErrorGetCode)();
Func _BASS_SFX_ErrorGetCode()
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "dword", "BASS_SFX_ErrorGetCode")
	If @error Then Return SetError(1,0,-1)
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_Init)(HINSTANCE hInstance, HWND hWnd);
Func _BASS_SFX_Init($hInstance, $hWnd)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_Init", "ptr", $hInstance, "hwnd", $hWnd)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ DWORD		SFXDEF(BASS_SFX_PluginFlags)(HSFX handle, DWORD flags, DWORD mask);
Func _BASS_SFX_PluginFlags($hHandle, $iFlags, $iMask)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "dword", "BASS_SFX_PluginFlags", "long", $hHandle, "dword", $iFlags, "dword", $iMask)
	If @error Then Return SetError(1,0,-1)
	Return $aResult[0]
EndFunc
;~ HSFX		SFXDEF(BASS_SFX_PluginCreate)(char* strPath, HWND hPluginWnd, int nWidth, int nHeight, DWORD flags);
Func _BASS_SFX_PluginCreate($strPath, $hPluginWnd, $iWidth, $iHeight, $iFlags)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "long", "BASS_SFX_PluginCreate", "str", $strPath, "hwnd", $hPluginWnd, "int", $iWidth, "int", $iHeight, "dword", $iFlags)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ HSFX		SFXDEF(BASS_SFX_PluginCreateW)(LPCWSTR strPath, HWND hPluginWnd, int nWidth, int nHeight, DWORD flags);
Func _BASS_SFX_PluginCreateW($strPath, $hPluginWnd, $iWidth, $iHeight, $iFlags)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "long", "BASS_SFX_PluginCreateW", "wstr", $strPath, "hwnd", $hPluginWnd, "int", $iWidth, "int", $iHeight, "dword", $iFlags)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ int			SFXDEF(BASS_SFX_PluginGetType)(HSFX handle);
Func _BASS_SFX_PluginGetType($hHandle)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginGetType", "long", $hHandle)
	If @error Then Return SetError(1,0,-1)
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_PluginSetStream)(HSFX handle, HSTREAM hStream);
Func _BASS_SFX_PluginSetStream($hHandle, $hStream)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginSetStream", "long", $hHandle, "long", $hStream)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_PluginStart)(HSFX handle);
Func _BASS_SFX_PluginStart($hHandle)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginStart", "long", $hHandle)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_PluginStop)(HSFX handle);
Func _BASS_SFX_PluginStop($hHandle)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginStop", "long", $hHandle)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ char*		SFXDEF(BASS_SFX_PluginGetName)(HSFX handle);
Func _BASS_SFX_PluginGetName($hHandle)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "str", "BASS_SFX_PluginGetName", "long", $hHandle)
	If @error Then Return SetError(1,0,'')
	Return $aResult[0]
EndFunc
;~ char*		SFXDEF(BASS_SFX_PluginGetNameW)(HSFX handle);
Func _BASS_SFX_PluginGetNameW($hHandle)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "wstr", "BASS_SFX_PluginGetNameW", "long", $hHandle)
	If @error Then Return SetError(1,0,'')
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_PluginConfig)(HSFX handle);
Func _BASS_SFX_PluginConfig($hHandle)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginConfig", "long", $hHandle)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ int			SFXDEF(BASS_SFX_PluginModuleGetCount)(HSFX handle);
Func _BASS_SFX_PluginModuleGetCount($hHandle)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginModuleGetCount", "long", $hHandle)
	If @error Then Return SetError(1,0,-1)
	Return $aResult[0]
EndFunc
;~ char*		SFXDEF(BASS_SFX_PluginModuleGetName)(HSFX handle, int module);
Func _BASS_SFX_PluginModuleGetName($hHandle, $iModule)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "str", "BASS_SFX_PluginModuleGetName", "long", $hHandle, "int", $iModule)
	If @error Then Return SetError(1,0,'')
	Return $aResult[0]
EndFunc
;~ LPCWSTR		SFXDEF(BASS_SFX_PluginModuleGetNameW)(HSFX handle, int module);
Func _BASS_SFX_PluginModuleGetNameW($hHandle, $iModule)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "wstr", "BASS_SFX_PluginModuleGetNameW", "long", $hHandle, "int", $iModule)
	If @error Then Return SetError(1,0,'')
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_PluginModuleSetActive)(HSFX handle, int module);
Func _BASS_SFX_PluginModuleSetActive($hHandle, $iModule)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginModuleSetActive", "long", $hHandle, "int", $iModule)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ int			SFXDEF(BASS_SFX_PluginModuleGetActive)(HSFX handle);
Func _BASS_SFX_PluginModuleGetActive($hHandle)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginModuleGetActive", "long", $hHandle)
	If @error Then Return SetError(1,0,-1)
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_PluginRender)(HSFX handle, HSTREAM hStream, HDC hDC); ;//only sonique, bassbox, or WMP
Func _BASS_SFX_PluginRender($hHandle, $hStream, $hDC)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginRender", 'long', $hHandle, 'long', $hStream, 'ptr', $hDC)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_PluginClicked)(HSFX handle, int x, int y);
Func _BASS_SFX_PluginClicked($hHandle, $iX, $iY)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginClicked", "long", $hHandle, 'int', $iX, 'int', $iY)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_PluginResize)(HSFX handle, int nWidth, int nHeight);
Func _BASS_SFX_PluginResize($hHandle, $iWidth, $iHeight)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginResize", "long", $hHandle, 'int', $iWidth, 'int', $iWidth)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_PluginFree)(HSFX handle);
Func _BASS_SFX_PluginFree($hHandle)
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_PluginFree", 'long', $hHandle)
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc
;~ BOOL		SFXDEF(BASS_SFX_Free)();
Func _BASS_SFX_Free()
	; Author: Prog@ndy
	Local $aResult = DllCall($_ghBASS_SFXdll, "int", "BASS_SFX_Free")
	If @error Then Return SetError(1,0,0)
	Return $aResult[0]
EndFunc

#cs
#ifdef __cplusplus
}
#endif
#ce
