#ifndef CREAMTRACKERENGINE_H #define CREAMTRACKERENGINE_H #ifdef __cplusplus extern "C" { #endif //#define CreamTrackerSoundAPI //#define CreamTrackerPortable #define CreamTrackerMinimalPlayer #define CreamTrackerCompact #define CreamTrackerMultithreading #define CreamTrackerSINCResampling //#define CreamTrackerSampleLoopCrossFade #define CreamTrackerCode //#define CreamTrackerTRICode //#define CreamTrackerWRS //#define CreamTrackerPCM //#define CreamTrackerDPCM4 //#define CreamTrackerADPCMIMA //#define CreamTrackerDeltaPCM #define CreamTrackerStrippedPatterns //#define CreamTrackerNormalPatterns #define CreamTrackerFFT //#define CreamTrackerThreadPriority //#define CreamTrackerThreadAffinity //#define CreamTrackerEffectAxx //#define CreamTrackerEffectBxx //#define CreamTrackerEffectCxx #define CreamTrackerEffectDxx //#define CreamTrackerEffectExx //#define CreamTrackerEffectFxx //#define CreamTrackerEffectGxx //#define CreamTrackerEffectHxx //#define CreamTrackerEffectIxx //#define CreamTrackerEffectJxx //#define CreamTrackerEffectKxx //#define CreamTrackerEffectLxx #define CreamTrackerEffectMxx //#define CreamTrackerEffectNxx //#define CreamTrackerEffectOxx //#define CreamTrackerEffectPxx //#define CreamTrackerEffectQxx //#define CreamTrackerEffectRxx //#define CreamTrackerEffectSxx //#define CreamTrackerEffectS0x //#define CreamTrackerEffectS1x //#define CreamTrackerEffectS2x //#define CreamTrackerEffectS3x //#define CreamTrackerEffectS4x //#define CreamTrackerEffectS5x //#define CreamTrackerEffectS6x //#define CreamTrackerEffectS7x //#define CreamTrackerEffectS8x //#define CreamTrackerEffectS9x //#define CreamTrackerEffectSAx //#define CreamTrackerEffectSBx //#define CreamTrackerEffectSCx //#define CreamTrackerEffectSDx //#define CreamTrackerEffectSEx //#define CreamTrackerEffectSFx //#define CreamTrackerEffectTxx //#define CreamTrackerEffectUxx #define CreamTrackerEffectVxx //#define CreamTrackerEffectWxx //#define CreamTrackerEffectXxx //#define CreamTrackerEffectYxx //#define CreamTrackerEffectZxx #define CREAMTRACKERENGINE_USE_STDINT #include #include #ifdef CREAMTRACKERENGINE_USE_STDINT #include #endif #include #include #ifndef CreamTrackerPortable #include #endif #ifdef _MSC_VER // MSVC #define CTE_PACK(decl) __pragma(pack(push, 1)) decl __pragma(pack(pop)) #define CTE_PACK_ALIGNED(decl, alignment) __pragma(pack(push, alignment)) decl __pragma(pack(pop)) #define CTE_likely(x) #define CTE_unlikely(x) #define CTE_restrict __restrict #define CTE_POSSIBLY_UNUSED(x) x #define CTE_WARN_UNUSED_RES #define CTE_PRINTF_FORMAT(x, y) #define CTE_WEAK_SYMBOL(x) x #define CTE_PURE #define CTE_CDECL __cdecl #define CTE_STDCALL __stdcall #define CTE_FASTCALL __fastcall #define CTE_INLINE inline #else // GCC, TCC and clang. Other C99-capable compilers are on my ignore-list #ifdef __TINYC__ #define CTE_GCC_COMPATIBLE #endif #ifdef __GNUC__ #define CTE_GCC_COMPATIBLE #endif #ifdef __clang__ #define CTE_GCC_COMPATIBLE #endif #ifdef CTE_GCC_COMPATIBLE #define CTE_PACK(decl) decl __attribute__((__packed__)) #define CTE_PACK_ALIGNMENT(decl, alignment) decl __attribute__((__packed__, __aligned__(alignment))) #define CTE_likely(x) __builtin_expect(!!(x), 1) #define CTE_unlikely(x) __builtin_expect(!!(x), 0) #define CTE_restrict __restrict__ #define CTE_POSSIBLY_UNUSED(x) x __attribute__((unused)) #define CTE_WARN_UNUSED_RES __attribute__((warn_unused_result)) #define CTE_PRINTF_FORMAT(x, y) __attribute__((format(printf, x, y))) #define CTE_WEAK_SYMBOL(x) x __attribute__((weak)) #define CTE_PURE __attribute__((pure)) #define CTE_CDECL __attribute__((__cdecl__)) #define CTE_STDCALL __attribute__((__stdcall__)) #define CTE_FASTCALL __attribute__((__fastcall__)) #define CTE_INLINE inline #else #error "Non-supported C compiler!" #endif #endif #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CTE_C99 #include #else #undef CTE_C99 #endif #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L #define CTE_C11 #else #undef CTE_C11 #endif #ifndef cte_malloc #define cte_malloc malloc #endif #ifndef cte_realloc #define cte_realloc realloc #endif #ifndef cte_free #define cte_free free #endif #ifdef CREAMTRACKERENGINE_USE_STDINT typedef int8_t cte_char_t; typedef int8_t cte_int8_t; typedef int16_t cte_int16_t; typedef int32_t cte_int32_t; typedef int64_t cte_int64_t; typedef uint8_t cte_uchar_t; typedef uint8_t cte_uint8_t; typedef uint16_t cte_uint16_t; typedef uint32_t cte_uint32_t; typedef uint64_t cte_uint64_t; typedef float cte_float_t; typedef double cte_double_t; typedef uint32_t cte_longbool_t; #else #ifndef CREAMTRACKERENGINE_USE_OWN_TYPES typedef signed char cte_char_t; typedef signed char cte_int8_t; typedef signed short cte_int16_t; typedef signed long int cte_int32_t; typedef signed long long cte_int64_t; typedef unsigned char cte_uchar_t; typedef unsigned char cte_uint8_t; typedef unsigned short cte_uint16_t; typedef unsigned long int cte_uint32_t; typedef unsigned long long cte_uint64_t; typedef float cte_float_t; typedef double cte_double_t; typedef unsigned long int cte_longbool_t; #endif #endif typedef void *cte_pointer; typedef cte_char_t *cte_char_p; typedef cte_int8_t *cte_int8_p; typedef cte_int16_t *cte_int16_p; typedef cte_int32_t *cte_int32_p; typedef cte_int64_t *cte_int64_p; typedef cte_uchar_t *cte_uchar_p; typedef cte_uint8_t *cte_uint8_p; typedef cte_uint16_t *cte_uint16_p; typedef cte_uint32_t *cte_uint32_p; typedef cte_uint64_t *cte_uint64_p; typedef cte_float_t *cte_float_p; typedef cte_double_t *cte_double_p; #ifndef CreamTrackerPortable typedef HANDLE cte_handle_t; typedef DWORD cte_threadID_t; typedef cte_handle_t *cte_handle_p; typedef cte_threadID_t *cte_threadID_p; #endif typedef cte_longbool_t *cte_longbool_p; #define CTE_FALSE (0) #define CTE_TRUE (1) #define PositionFactor (0x100000000ull) #define InvPositionFactor (1.0 / ((cte_double_t)PositionFactor)); #define PositionAllRemainBits 24 #define PositionAllRemainFactor (1<