#ifndef _SNDREAL_H_
#define	_SNDREAL_H_
 
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus*/
 
/*
//////////////////////////////////////////////////////
//	SNDREAL.H - Librairie SOUNDxd version 2.0		//
//////////////////////////////////////////////////////
//	Définitions des types et fonctions	de gestion  //
//	des pseudo-réels								//
//////////////////////////////////////////////////////
*/
 
#undef DLL_IMPEXP
#undef CPA_EXPORT
#ifdef _DLL_COMPILATION_MODE
	#define DLL_IMPEXP __declspec(dllexport)
	#define CPA_EXPORT
#else
	#define DLL_IMPEXP
	/****************************************/
	#if defined(CPA_WANTS_IMPORT)
	#define CPA_EXPORT __declspec(dllimport)
	#elif defined(CPA_WANTS_EXPORT)
	#define CPA_EXPORT __declspec(dllexport)
	#else
	#define CPA_EXPORT
	#endif
	/****************************************/
#endif
 
/**************************************************************************************/
#define M_MulIntRealSnd(i,r) ((i)*(r))
#define M_RealToDoubleSnd(r) (((double)r)/(0x10000))
#define M_DoubleToRealSnd(d) ((SndReal)((d)*0x10000))
#define M_DivIntIntRealSnd(a,b) ((SndReal)(((a)<<16)/(b)))
#define M_RealToIntSnd(r) ((r)>>16)
#define M_IntToRealSnd(r) ((r)<<16)
#define M_Fixed1616ToRealSnd(r) (r)
 
#define M_HighestIntAbsValueRealSnd (0x7FFF)	/*plus grand entier convertible en SndReal*/
#define M_LowestDoubleAbsValueRealSnd (0.0000153)		/*plus petit réel convertible en SndReal*/
 
#if defined(_DLL_COMPILATION_MODE) && !defined(SNDDLL_MODULE)
    #pragma message("-> sndreal : pointeurs de fonctions definis dans SNDDLL.H")
#else
	#if defined(PSX) && !defined(WIN32)
	DLL_IMPEXP CPA_EXPORT asm SndReal		SND_CALL SND_fn_rMulRealRealSnd(SndReal r1,SndReal r2);
	DLL_IMPEXP CPA_EXPORT asm SndReal		SND_CALL SND_fn_rMulRealRealQuickSnd(SndReal r1,SndReal r2);
	DLL_IMPEXP CPA_EXPORT asm SndReal		SND_CALL SND_fn_rAbsRealSnd(SndReal r);
	DLL_IMPEXP CPA_EXPORT asm SndReal		SND_CALL SND_fn_rDivRealRealSnd(SndReal r1,SndReal r2);
	#else
	DLL_IMPEXP CPA_EXPORT SndReal		SND_CALL SND_fn_rDivRealRealSnd(SndReal r1,SndReal r2);
	DLL_IMPEXP CPA_EXPORT SndReal		SND_CALL SND_fn_rMulRealRealSnd(SndReal r1,SndReal r2);
	DLL_IMPEXP CPA_EXPORT SndReal		SND_CALL SND_fn_rMulRealRealQuickSnd(SndReal r1,SndReal r2);
	DLL_IMPEXP CPA_EXPORT SndReal		SND_CALL SND_fn_rAbsRealSnd(SndReal r);
	#endif
DLL_IMPEXP CPA_EXPORT SndReal		SND_CALL SND_fn_rSqrtRealSnd(SndReal r);
DLL_IMPEXP CPA_EXPORT SndReal		SND_CALL SND_fn_rPseudoNormeRealSnd(SndReal r1,SndReal r2,SndReal r3);
DLL_IMPEXP CPA_EXPORT void			SND_CALL SND_fn_vSndRealTwinToSndReal(SndRealTwin,SndReal*,SndReal*);
DLL_IMPEXP CPA_EXPORT SndRealTwin	SND_CALL SND_fn_rtSndRealToSndRealTwin(SndReal,SndReal);
#endif
 
#ifdef __cplusplus
}
#endif /* __cplusplus*/
 
#endif /*_SNDREAL_H_*/
 
