From 4f983efbfe452b87a305dd5d369d0d86fafca2cf Mon Sep 17 00:00:00 2001 From: CNLohr Date: Mon, 11 Sep 2017 02:56:50 -0400 Subject: [PATCH] Major progress to getting colorchord on Windows TCC Give it a shot. colorchord2/windows/compile.bat. I am having issues getting sound in. --- .gitignore | 2 + colorchord2/DisplayHIDAPI.c | 5 +- colorchord2/DisplayNetwork.c | 6 +- colorchord2/OutputCells.c | 1 - colorchord2/OutputLinear.c | 1 - colorchord2/OutputProminent.c | 1 - colorchord2/default.conf | 2 +- colorchord2/dft.c | 2 + colorchord2/main.c | 14 +- colorchord2/os_generic.c | 42 +- colorchord2/os_generic.h | 12 +- colorchord2/outdrivers.h | 2 +- colorchord2/parameters.h | 3 +- colorchord2/sound.c | 2 +- colorchord2/sound.h | 3 + colorchord2/sound_alsa.c | 2 +- colorchord2/sound_null.c | 3 +- colorchord2/sound_pulse.c | 2 +- colorchord2/sound_win.c | 13 +- colorchord2/util.c | 2 +- colorchord2/windows/32/WS2_32.Lib | Bin 0 -> 346832 bytes colorchord2/windows/32/WinMM.Lib | Bin 0 -> 36976 bytes colorchord2/windows/64/WS2_32.Lib | Bin 0 -> 350088 bytes colorchord2/windows/64/WinMM.Lib | Bin 0 -> 42736 bytes colorchord2/windows/compile.bat | 8 + colorchord2/windows/math.h | 926 +++++++++++ colorchord2/windows/mmsystem.h | 1950 +++++++++++++++++++++++ colorchord2/windows/symbol_enumerator.c | 245 +++ colorchord2/windows/symbol_enumerator.h | 12 + colorchord2/windows/tcc_stubs.c | 80 + colorchord2/windows/winsock2.h | 1303 +++++++++++++++ 31 files changed, 4581 insertions(+), 63 deletions(-) create mode 100644 .gitignore create mode 100644 colorchord2/windows/32/WS2_32.Lib create mode 100644 colorchord2/windows/32/WinMM.Lib create mode 100644 colorchord2/windows/64/WS2_32.Lib create mode 100644 colorchord2/windows/64/WinMM.Lib create mode 100644 colorchord2/windows/compile.bat create mode 100644 colorchord2/windows/math.h create mode 100644 colorchord2/windows/mmsystem.h create mode 100644 colorchord2/windows/symbol_enumerator.c create mode 100644 colorchord2/windows/symbol_enumerator.h create mode 100644 colorchord2/windows/tcc_stubs.c create mode 100644 colorchord2/windows/winsock2.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3841a63 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +colorchord2/windows/colorchord.def +colorchord2/colorchord.def \ No newline at end of file diff --git a/colorchord2/DisplayHIDAPI.c b/colorchord2/DisplayHIDAPI.c index 40792a1..5e4dd70 100644 --- a/colorchord2/DisplayHIDAPI.c +++ b/colorchord2/DisplayHIDAPI.c @@ -9,7 +9,6 @@ #include "hidapi.h" #include "color.h" #include -#include struct HIDAPIOutDriver { @@ -58,7 +57,7 @@ static void * LEDOutThread( void * v ) } led->readyFlag = 0; } - usleep(100); + OGUSleep(100); } return 0; } @@ -86,7 +85,7 @@ static void LEDUpdate(void * id, struct NoteFinder*nf) int leds_this_round = 0; int ledbid = 0; - while( led->readyFlag ) usleep(100); + while( led->readyFlag ) OGUSleep(100); int lastledplace = 1; led->last_leds[0] = 0; diff --git a/colorchord2/DisplayNetwork.c b/colorchord2/DisplayNetwork.c index 1a4dac5..deba2d0 100644 --- a/colorchord2/DisplayNetwork.c +++ b/colorchord2/DisplayNetwork.c @@ -9,10 +9,12 @@ #include #include "color.h" #include "DrawFunctions.h" -#include -#ifdef WIN32 +#if defined(WIN32) || defined(WINDOWS) #include +#ifdef TCC +#include +#endif #define MSG_NOSIGNAL 0 #else #include diff --git a/colorchord2/OutputCells.c b/colorchord2/OutputCells.c index 502f985..4f5bee6 100644 --- a/colorchord2/OutputCells.c +++ b/colorchord2/OutputCells.c @@ -12,7 +12,6 @@ #include "color.h" #include #include -#include extern float DeltaFrameTime; extern double Now; diff --git a/colorchord2/OutputLinear.c b/colorchord2/OutputLinear.c index bac98ae..5c3d334 100644 --- a/colorchord2/OutputLinear.c +++ b/colorchord2/OutputLinear.c @@ -12,7 +12,6 @@ #include "color.h" #include #include -#include struct LEDOutDriver { diff --git a/colorchord2/OutputProminent.c b/colorchord2/OutputProminent.c index a9cfb6c..c9f1792 100644 --- a/colorchord2/OutputProminent.c +++ b/colorchord2/OutputProminent.c @@ -11,7 +11,6 @@ #include "color.h" #include #include -#include struct ProminentDriver { diff --git a/colorchord2/default.conf b/colorchord2/default.conf index 6bc9161..41f76a5 100644 --- a/colorchord2/default.conf +++ b/colorchord2/default.conf @@ -18,7 +18,7 @@ play = 0 rec = 1 channels = 2 samplerate = 44100 -wininput = 0 +wininput = 1 #Compiled version will default this. #sound_source = ALSA diff --git a/colorchord2/dft.c b/colorchord2/dft.c index 2ee7174..a28a758 100644 --- a/colorchord2/dft.c +++ b/colorchord2/dft.c @@ -420,7 +420,9 @@ uint16_t Sdatspace[FIXBINS*4]; //(advances,places,isses,icses) static uint8_t Sdo_this_octave[BINCYCLE]; static int16_t Saccum_octavebins[OCTAVES]; static uint8_t Swhichoctaveplace; +#ifndef INCLUDING_EMBEDDED uint16_t embeddedbins[FIXBINS]; //This is updated every time the DFT hits the octavecount, or 1/32 updates. +#endif //From: http://stackoverflow.com/questions/1100090/looking-for-an-efficient-integer-square-root-algorithm-for-arm-thumb2 /** diff --git a/colorchord2/main.c b/colorchord2/main.c index 5d782ac..4136a90 100644 --- a/colorchord2/main.c +++ b/colorchord2/main.c @@ -17,10 +17,11 @@ #include "parameters.h" #include "hook.h" #include "configs.h" +#include struct SoundDriver * sd; -#ifdef WIN32 +#if defined(WIN32) || defined(USE_WINDOWS) #include #define ESCAPE_KEY 0x1B @@ -41,8 +42,8 @@ double Now = 0; int lastfps; short screenx, screeny; -struct DriverInstances * outdriver[MAX_OUT_DRIVERS]; +struct DriverInstances * outdriver[MAX_OUT_DRIVERS]; int headless = 0; REGISTER_PARAM( headless, PAINT ); int set_screenx = 640; REGISTER_PARAM( set_screenx, PAINT ); @@ -159,18 +160,19 @@ void SoundCB( float * out, float * in, int samplesr, int * samplesp, struct Soun *samplesp = samplesr; } - int main(int argc, char ** argv) { int i; - +#ifdef TCC + ManuallyRegisterDevices(); +#endif + printf( "Output Drivers:\n" ); for( i = 0; i < MAX_OUT_DRIVERS; i++ ) { if( ODList[i].Name ) printf( "\t%s\n", ODList[i].Name ); } - -#ifdef WIN32 +#if defined(WIN32) || defined(USE_WINDOWS) WSADATA wsaData; WSAStartup(0x202, &wsaData); diff --git a/colorchord2/os_generic.c b/colorchord2/os_generic.c index effe5eb..da281e3 100644 --- a/colorchord2/os_generic.c +++ b/colorchord2/os_generic.c @@ -2,7 +2,6 @@ #include "os_generic.h" - #ifdef USE_WINDOWS #include @@ -49,15 +48,16 @@ double OGGetFileTime( const char * file ) } -og_thread_t OGCreateThread( void * (function)( void * ), void * parameter ) +og_thread_t OGCreateThread( void * (routine)( void * ), void * parameter ) { - return (og_thread_t)CreateThread( 0, 0, (LPTHREAD_START_ROUTINE)function, parameter, 0, 0 ); + return (og_thread_t)CreateThread( 0, 0, (LPTHREAD_START_ROUTINE)routine, parameter, 0, 0 ); } void * OGJoinThread( og_thread_t ot ) { WaitForSingleObject( ot, INFINITE ); CloseHandle( ot ); + return 0; } void OGCancelThread( og_thread_t ot ) @@ -93,28 +93,23 @@ og_sema_t OGCreateSema() return (og_sema_t)sem; } - - -typedef LONG NTSTATUS; - -typedef NTSTATUS (NTAPI *_NtQuerySemaphore)( - HANDLE SemaphoreHandle, - DWORD SemaphoreInformationClass, /* Would be SEMAPHORE_INFORMATION_CLASS */ - PVOID SemaphoreInformation, /* but this is to much to dump here */ - ULONG SemaphoreInformationLength, - PULONG ReturnLength OPTIONAL -); - - -typedef struct _SEMAPHORE_BASIC_INFORMATION { - ULONG CurrentCount; - ULONG MaximumCount; -} SEMAPHORE_BASIC_INFORMATION; - - int OGGetSema( og_sema_t os ) { + typedef LONG NTSTATUS; HANDLE sem = (HANDLE)os; + typedef NTSTATUS (NTAPI *_NtQuerySemaphore)( + HANDLE SemaphoreHandle, + DWORD SemaphoreInformationClass, /* Would be SEMAPHORE_INFORMATION_CLASS */ + PVOID SemaphoreInformation, /* but this is to much to dump here */ + ULONG SemaphoreInformationLength, + PULONG ReturnLength OPTIONAL + ); + + typedef struct _SEMAPHORE_BASIC_INFORMATION { + ULONG CurrentCount; + ULONG MaximumCount; + } SEMAPHORE_BASIC_INFORMATION; + static _NtQuerySemaphore NtQuerySemaphore; SEMAPHORE_BASIC_INFORMATION BasicInfo; @@ -158,9 +153,8 @@ void OGDeleteSema( og_sema_t os ) #else -#ifndef _GNU_SOURCE #define _GNU_SOURCE -#endif + #include #include diff --git a/colorchord2/os_generic.h b/colorchord2/os_generic.h index c7de7db..163f2db 100644 --- a/colorchord2/os_generic.h +++ b/colorchord2/os_generic.h @@ -1,9 +1,8 @@ //Copyright 2015 <>< Charles Lohr under the NewBSD or MIT/x11 License. - #ifndef _OS_GENERIC_H #define _OS_GENERIC_H -#ifdef WIN32 +#if defined( WIN32 ) || defined (WINDOWS) || defined( _WIN32) #define USE_WINDOWS #endif @@ -12,12 +11,7 @@ extern "C" { #endif -#define EXECUTE_AT_BOOT( x, y ) \ - \ - void fn##x() __attribute__((constructor)); \ - void fn##x() \ - { y; } \ - + //Things that shouldn't be macro'd double OGGetAbsoluteTime(); void OGSleep( int is ); @@ -55,7 +49,7 @@ void OGDeleteSema( og_sema_t os ); #endif -//Date Stamp: 2014-06-12 +//Date Stamp: 2012-02-15 /* NOTE: Portions (namely the top section) are part of headers from other diff --git a/colorchord2/outdrivers.h b/colorchord2/outdrivers.h index 60f56ce..db3afce 100644 --- a/colorchord2/outdrivers.h +++ b/colorchord2/outdrivers.h @@ -41,6 +41,6 @@ struct DriverInstances * SetupOutDriver( ); void RegOutDriver( const char * ron, struct DriverInstances * (*Init)( ) ); #define REGISTER_OUT_DRIVER( name ) \ - EXECUTE_AT_BOOT( r##name, RegOutDriver( #name, name ) ); + void REGISTER##name() __attribute__((constructor)) { RegOutDriver( #name, name ); } #endif diff --git a/colorchord2/parameters.h b/colorchord2/parameters.h index f23bacd..b6c2fe2 100644 --- a/colorchord2/parameters.h +++ b/colorchord2/parameters.h @@ -58,8 +58,7 @@ void SetParametersFromString( const char * string ); void AddCallback( const char * name, ParamCallbackT t, void * v ); #define REGISTER_PARAM( parameter_name, type ) \ - void Register##parameter_name() __attribute__((constructor)); \ - void Register##parameter_name() { RegisterValue( #parameter_name, type, ¶meter_name, sizeof( parameter_name ) ); } + void REGISTER##parameter_name() __attribute__((constructor)) { RegisterValue( #parameter_name, type, ¶meter_name, sizeof( parameter_name ) ); } #endif diff --git a/colorchord2/sound.c b/colorchord2/sound.c index df7ff1c..9f03707 100644 --- a/colorchord2/sound.c +++ b/colorchord2/sound.c @@ -55,7 +55,6 @@ struct SoundDriver * InitSound( const char * driver_name, SoundCBType cb ) { int i; struct SoundDriver * ret = 0; - if( driver_name == 0 || strlen( driver_name ) == 0 ) { //Search for a driver. @@ -74,6 +73,7 @@ struct SoundDriver * InitSound( const char * driver_name, SoundCBType cb ) } else { + printf( "Initializing sound. Recommended driver: %s\n", driver_name ); for( i = 0; i < MAX_SOUND_DRIVERS; i++ ) { if( SoundDrivers[i] == 0 ) diff --git a/colorchord2/sound.h b/colorchord2/sound.h index 0bfe9b9..d83ed9b 100644 --- a/colorchord2/sound.h +++ b/colorchord2/sound.h @@ -34,5 +34,8 @@ void CloseSound( struct SoundDriver * soundobject ); //Called by various sound drivers. Notice priority must be greater than 0. Priority of 0 or less will not register. void RegSound( int priority, const char * name, SoundInitFn * fn ); +#define REGISTER_SOUND( sounddriver, priority, name, function ) \ + void REGISTER##sounddriver() __attribute__((constructor)) { RegSound( priority, name, function ); } + #endif diff --git a/colorchord2/sound_alsa.c b/colorchord2/sound_alsa.c index 64dc720..1161c1e 100644 --- a/colorchord2/sound_alsa.c +++ b/colorchord2/sound_alsa.c @@ -337,5 +337,5 @@ void * InitSoundAlsa( SoundCBType cb ) return InitASound(r); } -EXECUTE_AT_BOOT( AlsaSoundReg, RegSound( 10, "ALSA", InitSoundAlsa ) ); +REGISTER_SOUND( AlsaSound, 10, "ALSA", InitSoundAlsa ); diff --git a/colorchord2/sound_null.c b/colorchord2/sound_null.c index 47d5415..d7f8d16 100644 --- a/colorchord2/sound_null.c +++ b/colorchord2/sound_null.c @@ -41,6 +41,5 @@ void * InitSoundNull( SoundCBType cb ) } - -EXECUTE_AT_BOOT( NullSoundReg, RegSound( 1, "NULL", InitSoundNull ) ); +REGISTER_SOUND( NullSound, 1, "NULL", InitSoundNull ); diff --git a/colorchord2/sound_pulse.c b/colorchord2/sound_pulse.c index 2cecc35..4664c2e 100644 --- a/colorchord2/sound_pulse.c +++ b/colorchord2/sound_pulse.c @@ -374,6 +374,6 @@ fail: -EXECUTE_AT_BOOT( PulseSoundReg, RegSound( 11, "PULSE", InitSoundPulse ) ); +REGISTER_SOUND( PulseSound, 11, "PULSE", InitSoundPulse ); diff --git a/colorchord2/sound_win.c b/colorchord2/sound_win.c index 684e61c..559b87f 100644 --- a/colorchord2/sound_win.c +++ b/colorchord2/sound_win.c @@ -4,9 +4,9 @@ #include "parameters.h" #include "sound.h" #include "os_generic.h" -#include #include #include +#include #if defined(WIN32) #pragma comment(lib,"winmm.lib") @@ -106,7 +106,8 @@ static struct SoundDriverWin * InitWinSound( struct SoundDriverWin * r ) { int i; WAVEFORMATEX wfmt; - + memset( &wfmt, 0, sizeof(wfmt) ); + printf ("WFMT Size (debugging temp for TCC): %d\n", sizeof(wfmt) ); if( GetParameterI( "play", 0 ) ) { fprintf( stderr, "Error: This Windows Sound Driver does not support playback.\n" ); @@ -136,7 +137,7 @@ static struct SoundDriverWin * InitWinSound( struct SoundDriverWin * r ) int p = waveInOpen(&r->hMyWave, dwdevice, &wfmt,(DWORD)(void*)(&HANDLEMIC) , 0, CALLBACK_FUNCTION); - printf( "WIO: %d\n", p ); //On real windows, returns 11 + printf( "WIO: %d\n", p ); for ( i=0;ihMyWave); - printf( "WIS: %d\n", p ); //On real windows returns 5. + printf( "WIS: %d\n", p ); return r; } @@ -159,7 +160,7 @@ static struct SoundDriverWin * InitWinSound( struct SoundDriverWin * r ) void * InitSoundWin( SoundCBType cb ) { - struct SoundDriverWin * r = malloc( sizeof( struct SoundDriverWin ) ); + struct SoundDriverWin * r = (struct SoundDriverWin *)malloc( sizeof( struct SoundDriverWin ) ); r->CloseFn = CloseSoundWin; r->SoundStateFn = SoundStateWin; @@ -177,5 +178,5 @@ void * InitSoundWin( SoundCBType cb ) return InitWinSound(r); } -EXECUTE_AT_BOOT( WinSoundReg, RegSound( 10, "WIN", InitSoundWin ) ); +REGISTER_SOUND( SoundWin, 10, "WIN", InitSoundWin ); diff --git a/colorchord2/util.c b/colorchord2/util.c index d1e2d4e..9d1c8c4 100644 --- a/colorchord2/util.c +++ b/colorchord2/util.c @@ -2,8 +2,8 @@ //This file may be used in whole or part in any way for any purpose by anyone //without restriction. -#include "util.h" #include +#include "util.h" #include //Take the absolute distance between two points on a torus. diff --git a/colorchord2/windows/32/WS2_32.Lib b/colorchord2/windows/32/WS2_32.Lib new file mode 100644 index 0000000000000000000000000000000000000000..750a539f253150b1a6697f24fe29e2a434bf2798 GIT binary patch literal 346832 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 z%0D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ɣ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%0A80HNvPTuNlLb_EfZQv<;GdHM9n%826I3UhMG8j= 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 literal 0 HcmV?d00001 diff --git a/colorchord2/windows/compile.bat b/colorchord2/windows/compile.bat new file mode 100644 index 0000000..32f1031 --- /dev/null +++ b/colorchord2/windows/compile.bat @@ -0,0 +1,8 @@ +@echo off +echo Unzip https://download.savannah.gnu.org/releases/tinycc/tcc-0.9.26-win64-bin.zip to C:\tcc +set CFLAGS=-v -DHIDAPI -DWINDOWS -DWIN32 -DTCC -DRUNTIME_SYMNUM -Os -Itccinc -DINCLUDING_EMBEDDED -I.. -I. -I../../embeddedcommon -rdynamic -g +set LDFLAGS=-lkernel32 -lgdi32 -luser32 -lsetupapi -ldbghelp -ltcc1 -lwinmm -lws2_32 +set SOURCES=..\chash.c ..\color.c ..\configs.c ..\decompose.c ..\dft.c ..\DisplayNetwork.c ..\DisplayArray.c ..\DisplayHIDAPI.c ..\DisplayOUTDriver.c ..\DisplayPie.c ..\DrawFunctions.c ..\filter.c ..\hidapi.c ..\hook.c ..\main.c ..\os_generic.c ..\outdrivers.c ..\OutputCells.c ..\OutputLinear.c ..\OutputProminent.c ..\OutputVoronoi.c ..\parameters.c ..\sound.c ..\sound_win.c ..\sound_null.c ..\util.c ..\WinDriver.c ..\notefinder.c ..\..\embeddedcommon\DFT32.c tcc_stubs.c symbol_enumerator.c +set ARCH_SPECIFIC=-L32 +@echo on +C:\tcc\tcc %CFLAGS% %ARCH_SPECIFIC% %SOURCES% %LDFLAGS% -o ..\colorchord.exe \ No newline at end of file diff --git a/colorchord2/windows/math.h b/colorchord2/windows/math.h new file mode 100644 index 0000000..cd5ee3d --- /dev/null +++ b/colorchord2/windows/math.h @@ -0,0 +1,926 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ +#ifndef _MATH_H_ +#define _MATH_H_ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#include <_mingw.h> + +struct exception; + +#pragma pack(push,_CRT_PACKING) + +#define _DOMAIN 1 +#define _SING 2 +#define _OVERFLOW 3 +#define _UNDERFLOW 4 +#define _TLOSS 5 +#define _PLOSS 6 + +#ifndef __STRICT_ANSI__ +#ifndef NO_OLDNAMES +#define DOMAIN _DOMAIN +#define SING _SING +#define OVERFLOW _OVERFLOW +#define UNDERFLOW _UNDERFLOW +#define TLOSS _TLOSS +#define PLOSS _PLOSS +#endif +#endif + +#ifndef __STRICT_ANSI__ +#define M_E 2.71828182845904523536 +#define M_LOG2E 1.44269504088896340736 +#define M_LOG10E 0.434294481903251827651 +#define M_LN2 0.693147180559945309417 +#define M_LN10 2.30258509299404568402 +#define M_PI 3.14159265358979323846 +#define M_PI_2 1.57079632679489661923 +#define M_PI_4 0.785398163397448309616 +#define M_1_PI 0.318309886183790671538 +#define M_2_PI 0.636619772367581343076 +#define M_2_SQRTPI 1.12837916709551257390 +#define M_SQRT2 1.41421356237309504880 +#define M_SQRT1_2 0.707106781186547524401 +#endif + +#ifndef __STRICT_ANSI__ +/* See also float.h */ +#ifndef __MINGW_FPCLASS_DEFINED +#define __MINGW_FPCLASS_DEFINED 1 +#define _FPCLASS_SNAN 0x0001 /* Signaling "Not a Number" */ +#define _FPCLASS_QNAN 0x0002 /* Quiet "Not a Number" */ +#define _FPCLASS_NINF 0x0004 /* Negative Infinity */ +#define _FPCLASS_NN 0x0008 /* Negative Normal */ +#define _FPCLASS_ND 0x0010 /* Negative Denormal */ +#define _FPCLASS_NZ 0x0020 /* Negative Zero */ +#define _FPCLASS_PZ 0x0040 /* Positive Zero */ +#define _FPCLASS_PD 0x0080 /* Positive Denormal */ +#define _FPCLASS_PN 0x0100 /* Positive Normal */ +#define _FPCLASS_PINF 0x0200 /* Positive Infinity */ +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _EXCEPTION_DEFINED +#define _EXCEPTION_DEFINED + struct _exception { + int type; + char *name; + double arg1; + double arg2; + double retval; + }; +#endif + +#ifndef _COMPLEX_DEFINED +#define _COMPLEX_DEFINED + struct _complex { + double x,y; + }; +#endif + +#define EDOM 33 +#define ERANGE 34 + +#ifndef _HUGE +#ifdef _MSVCRT_ + extern double *_HUGE; +#else + extern double *_imp___HUGE; +#define _HUGE (*_imp___HUGE) +#endif +#endif + +#define HUGE_VAL _HUGE + +#ifndef _CRT_ABS_DEFINED +#define _CRT_ABS_DEFINED + int __cdecl abs(int _X); + long __cdecl labs(long _X); +#endif + double __cdecl acos(double _X); + double __cdecl asin(double _X); + double __cdecl atan(double _X); + double __cdecl atan2(double _Y,double _X); +#ifndef _SIGN_DEFINED +#define _SIGN_DEFINED + _CRTIMP double __cdecl _copysign (double _Number,double _Sign); + _CRTIMP double __cdecl _chgsign (double _X); +#endif + double __cdecl cos(double _X); + double __cdecl cosh(double _X); + double __cdecl exp(double _X); + double __cdecl expm1(double _X); + double __cdecl fabs(double _X); + double __cdecl fmod(double _X,double _Y); + double __cdecl log(double _X); + double __cdecl log10(double _X); + double __cdecl pow(double _X,double _Y); + double __cdecl sin(double _X); + double __cdecl sinh(double _X); + double __cdecl tan(double _X); + double __cdecl tanh(double _X); + double __cdecl sqrt(double _X); +#ifndef _CRT_ATOF_DEFINED +#define _CRT_ATOF_DEFINED + double __cdecl atof(const char *_String); + double __cdecl _atof_l(const char *_String,_locale_t _Locale); +#endif + + _CRTIMP double __cdecl _cabs(struct _complex _ComplexA); + double __cdecl ceil(double _X); + double __cdecl floor(double _X); + double __cdecl frexp(double _X,int *_Y); + double __cdecl _hypot(double _X,double _Y); + _CRTIMP double __cdecl _j0(double _X); + _CRTIMP double __cdecl _j1(double _X); + _CRTIMP double __cdecl _jn(int _X,double _Y); + double __cdecl ldexp(double _X,int _Y); +#ifndef _CRT_MATHERR_DEFINED +#define _CRT_MATHERR_DEFINED + int __cdecl _matherr(struct _exception *_Except); +#endif + double __cdecl modf(double _X,double *_Y); + _CRTIMP double __cdecl _y0(double _X); + _CRTIMP double __cdecl _y1(double _X); + _CRTIMP double __cdecl _yn(int _X,double _Y); + +#if(defined(_X86_) && !defined(__x86_64)) + _CRTIMP int __cdecl _set_SSE2_enable(int _Flag); + /* from libmingwex */ + float __cdecl _hypotf(float _X,float _Y); +#endif + + float frexpf(float _X,int *_Y); + float __cdecl ldexpf(float _X,int _Y); + long double __cdecl ldexpl(long double _X,int _Y); + float __cdecl acosf(float _X); + float __cdecl asinf(float _X); + float __cdecl atanf(float _X); + float __cdecl atan2f(float _X,float _Y); + float __cdecl cosf(float _X); + float __cdecl sinf(float _X); + float __cdecl tanf(float _X); + float __cdecl coshf(float _X); + float __cdecl sinhf(float _X); + float __cdecl tanhf(float _X); + float __cdecl expf(float _X); + float __cdecl expm1f(float _X); + float __cdecl logf(float _X); + float __cdecl log10f(float _X); + float __cdecl modff(float _X,float *_Y); + float __cdecl powf(float _X,float _Y); + float __cdecl sqrtf(float _X); + float __cdecl ceilf(float _X); + float __cdecl floorf(float _X); + float __cdecl fmodf(float _X,float _Y); + float __cdecl _hypotf(float _X,float _Y); + float __cdecl fabsf(float _X); +#if !defined(__ia64__) + /* from libmingwex */ + float __cdecl _copysignf (float _Number,float _Sign); + float __cdecl _chgsignf (float _X); + float __cdecl _logbf(float _X); + float __cdecl _nextafterf(float _X,float _Y); + int __cdecl _finitef(float _X); + int __cdecl _isnanf(float _X); + int __cdecl _fpclassf(float _X); +#endif + +#ifndef __cplusplus + __CRT_INLINE long double __cdecl fabsl (long double x) + { + long double res; + __asm__ ("fabs;" : "=t" (res) : "0" (x)); + return res; + } +#define _hypotl(x,y) ((long double)_hypot((double)(x),(double)(y))) +#define _matherrl _matherr + __CRT_INLINE long double _chgsignl(long double _Number) { return _chgsign((double)(_Number)); } + __CRT_INLINE long double _copysignl(long double _Number,long double _Sign) { return _copysign((double)(_Number),(double)(_Sign)); } + __CRT_INLINE float frexpf(float _X,int *_Y) { return ((float)frexp((double)_X,_Y)); } + +#if !defined (__ia64__) + __CRT_INLINE float __cdecl fabsf (float x) + { + return fabs(x); + } + + __CRT_INLINE float __cdecl ldexpf (float x, int expn) { return (float) ldexp (x, expn); } +#endif +#else + // cplusplus + __CRT_INLINE long double __cdecl fabsl (long double x) + { + long double res; + __asm__ ("fabs;" : "=t" (res) : "0" (x)); + return res; + } + __CRT_INLINE long double modfl(long double _X,long double *_Y) { + double _Di,_Df = modf((double)_X,&_Di); + *_Y = (long double)_Di; + return (_Df); + } + __CRT_INLINE long double _chgsignl(long double _Number) { return _chgsign(static_cast(_Number)); } + __CRT_INLINE long double _copysignl(long double _Number,long double _Sign) { return _copysign(static_cast(_Number),static_cast(_Sign)); } + __CRT_INLINE float frexpf(float _X,int *_Y) { return ((float)frexp((double)_X,_Y)); } +#ifndef __ia64__ + __CRT_INLINE float __cdecl fabsf (float x) + { + float res; + __asm__ ("fabs;" : "=t" (res) : "0" (x)); + return res; + } + __CRT_INLINE float __cdecl ldexpf (float x, int expn) { return (float) ldexp (x, expn); } +#ifndef __x86_64 + __CRT_INLINE float acosf(float _X) { return ((float)acos((double)_X)); } + __CRT_INLINE float asinf(float _X) { return ((float)asin((double)_X)); } + __CRT_INLINE float atanf(float _X) { return ((float)atan((double)_X)); } + __CRT_INLINE float atan2f(float _X,float _Y) { return ((float)atan2((double)_X,(double)_Y)); } + __CRT_INLINE float ceilf(float _X) { return ((float)ceil((double)_X)); } + __CRT_INLINE float cosf(float _X) { return ((float)cos((double)_X)); } + __CRT_INLINE float coshf(float _X) { return ((float)cosh((double)_X)); } + __CRT_INLINE float expf(float _X) { return ((float)exp((double)_X)); } + __CRT_INLINE float floorf(float _X) { return ((float)floor((double)_X)); } + __CRT_INLINE float fmodf(float _X,float _Y) { return ((float)fmod((double)_X,(double)_Y)); } + __CRT_INLINE float logf(float _X) { return ((float)log((double)_X)); } + __CRT_INLINE float log10f(float _X) { return ((float)log10((double)_X)); } + __CRT_INLINE float modff(float _X,float *_Y) { + double _Di,_Df = modf((double)_X,&_Di); + *_Y = (float)_Di; + return ((float)_Df); + } + __CRT_INLINE float powf(float _X,float _Y) { return ((float)pow((double)_X,(double)_Y)); } + __CRT_INLINE float sinf(float _X) { return ((float)sin((double)_X)); } + __CRT_INLINE float sinhf(float _X) { return ((float)sinh((double)_X)); } + __CRT_INLINE float sqrtf(float _X) { return ((float)sqrt((double)_X)); } + __CRT_INLINE float tanf(float _X) { return ((float)tan((double)_X)); } + __CRT_INLINE float tanhf(float _X) { return ((float)tanh((double)_X)); } +#endif +#endif +#endif + +#ifndef NO_OLDNAMES +#define matherr _matherr + +#define HUGE _HUGE + /* double __cdecl cabs(struct _complex _X); */ + double __cdecl hypot(double _X,double _Y); + _CRTIMP double __cdecl j0(double _X); + _CRTIMP double __cdecl j1(double _X); + _CRTIMP double __cdecl jn(int _X,double _Y); + _CRTIMP double __cdecl y0(double _X); + _CRTIMP double __cdecl y1(double _X); + _CRTIMP double __cdecl yn(int _X,double _Y); +#endif + +#ifndef __NO_ISOCEXT +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \ + || !defined __STRICT_ANSI__ || defined __GLIBCPP__ + +#define NAN (0.0F/0.0F) +#define HUGE_VALF (1.0F/0.0F) +#define HUGE_VALL (1.0L/0.0L) +#define INFINITY (1.0F/0.0F) + + +#define FP_NAN 0x0100 +#define FP_NORMAL 0x0400 +#define FP_INFINITE (FP_NAN | FP_NORMAL) +#define FP_ZERO 0x4000 +#define FP_SUBNORMAL (FP_NORMAL | FP_ZERO) + /* 0x0200 is signbit mask */ + + + /* + We can't __CRT_INLINE float or double, because we want to ensure truncation + to semantic type before classification. + (A normal long double value might become subnormal when + converted to double, and zero when converted to float.) + */ + + extern int __cdecl __fpclassifyf (float); + extern int __cdecl __fpclassify (double); + extern int __cdecl __fpclassifyl (long double); + +/* Implemented at tcc/tcc_libm.h */ +#define fpclassify(x) (sizeof (x) == sizeof (float) ? __fpclassifyf (x) \ + : sizeof (x) == sizeof (double) ? __fpclassify (x) \ + : __fpclassifyl (x)) + + /* 7.12.3.2 */ +#define isfinite(x) ((fpclassify(x) & FP_NAN) == 0) + + /* 7.12.3.3 */ +#define isinf(x) (fpclassify(x) == FP_INFINITE) + + /* 7.12.3.4 */ + /* We don't need to worry about trucation here: + A NaN stays a NaN. */ +#define isnan(x) (fpclassify(x) == FP_NAN) + + /* 7.12.3.5 */ +#define isnormal(x) (fpclassify(x) == FP_NORMAL) + + /* 7.12.3.6 The signbit macro */ + + extern int __cdecl __signbitf (float); + extern int __cdecl __signbit (double); + extern int __cdecl __signbitl (long double); + +/* Implemented at tcc/tcc_libm.h */ +#define signbit(x) (sizeof (x) == sizeof (float) ? __signbitf (x) \ + : sizeof (x) == sizeof (double) ? __signbit (x) \ + : __signbitl (x)) + + extern double __cdecl exp2(double); + extern float __cdecl exp2f(float); + extern long double __cdecl exp2l(long double); + +#define FP_ILOGB0 ((int)0x80000000) +#define FP_ILOGBNAN ((int)0x80000000) + extern int __cdecl ilogb (double); + extern int __cdecl ilogbf (float); + extern int __cdecl ilogbl (long double); + + extern double __cdecl log1p(double); + extern float __cdecl log1pf(float); + extern long double __cdecl log1pl(long double); + + extern double __cdecl log2 (double); + extern float __cdecl log2f (float); + extern long double __cdecl log2l (long double); + + extern double __cdecl logb (double); + extern float __cdecl logbf (float); + extern long double __cdecl logbl (long double); + + __CRT_INLINE double __cdecl logb (double x) + { + double res; + __asm__ ("fxtract\n\t" + "fstp %%st" : "=t" (res) : "0" (x)); + return res; + } + + __CRT_INLINE float __cdecl logbf (float x) + { + float res; + __asm__ ("fxtract\n\t" + "fstp %%st" : "=t" (res) : "0" (x)); + return res; + } + + __CRT_INLINE long double __cdecl logbl (long double x) + { + long double res; + __asm__ ("fxtract\n\t" + "fstp %%st" : "=t" (res) : "0" (x)); + return res; + } + + extern long double __cdecl modfl (long double, long double*); + + /* 7.12.6.13 */ + extern double __cdecl scalbn (double, int); + extern float __cdecl scalbnf (float, int); + extern long double __cdecl scalbnl (long double, int); + + extern double __cdecl scalbln (double, long); + extern float __cdecl scalblnf (float, long); + extern long double __cdecl scalblnl (long double, long); + + /* 7.12.7.1 */ + /* Implementations adapted from Cephes versions */ + extern double __cdecl cbrt (double); + extern float __cdecl cbrtf (float); + extern long double __cdecl cbrtl (long double); + + __CRT_INLINE float __cdecl hypotf (float x, float y) + { return (float) hypot (x, y);} + extern long double __cdecl hypotl (long double, long double); + + extern long double __cdecl powl (long double, long double); + extern long double __cdecl expl(long double); + extern long double __cdecl expm1l(long double); + extern long double __cdecl coshl(long double); + extern long double __cdecl fabsl (long double); + extern long double __cdecl acosl(long double); + extern long double __cdecl asinl(long double); + extern long double __cdecl atanl(long double); + extern long double __cdecl atan2l(long double,long double); + extern long double __cdecl sinhl(long double); + extern long double __cdecl tanhl(long double); + + /* 7.12.8.1 The erf functions */ + extern double __cdecl erf (double); + extern float __cdecl erff (float); + /* TODO + extern long double __cdecl erfl (long double); + */ + + /* 7.12.8.2 The erfc functions */ + extern double __cdecl erfc (double); + extern float __cdecl erfcf (float); + /* TODO + extern long double __cdecl erfcl (long double); + */ + + /* 7.12.8.3 The lgamma functions */ + extern double __cdecl lgamma (double); + extern float __cdecl lgammaf (float); + extern long double __cdecl lgammal (long double); + + /* 7.12.8.4 The tgamma functions */ + extern double __cdecl tgamma (double); + extern float __cdecl tgammaf (float); + extern long double __cdecl tgammal (long double); + + extern long double __cdecl ceill (long double); + extern long double __cdecl floorl (long double); + extern long double __cdecl frexpl(long double,int *); + extern long double __cdecl log10l(long double); + extern long double __cdecl logl(long double); + extern long double __cdecl cosl(long double); + extern long double __cdecl sinl(long double); + extern long double __cdecl tanl(long double); + extern long double sqrtl(long double); + + /* 7.12.9.3 */ + extern double __cdecl nearbyint ( double); + extern float __cdecl nearbyintf (float); + extern long double __cdecl nearbyintl (long double); + + /* 7.12.9.4 */ + /* round, using fpu control word settings */ + __CRT_INLINE double __cdecl rint (double x) + { + double retval; + __asm__ ( + "fldl %1\n" + "frndint \n" + "fstl %0\n" : "=m" (retval) : "m" (x)); + return retval; + } + + __CRT_INLINE float __cdecl rintf (float x) + { + float retval; + __asm__ ( + "flds %1\n" + "frndint \n" + "fsts %0\n" : "=m" (retval) : "m" (x)); + return retval; + } + + __CRT_INLINE long double __cdecl rintl (long double x) + { + long double retval; + __asm__ ( + "fldt %1\n" + "frndint \n" + "fstt %0\n" : "=m" (retval) : "m" (x)); + return retval; + } + + /* 7.12.9.5 */ + __CRT_INLINE long __cdecl lrint (double x) + { + long retval; + __asm__ __volatile__ \ + ("fldl %1\n" \ + "fistpl %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + __CRT_INLINE long __cdecl lrintf (float x) + { + long retval; + __asm__ __volatile__ \ + ("flds %1\n" \ + "fistpl %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + __CRT_INLINE long __cdecl lrintl (long double x) + { + long retval; + __asm__ __volatile__ \ + ("fldt %1\n" \ + "fistpl %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + __CRT_INLINE long long __cdecl llrint (double x) + { + long long retval; + __asm__ __volatile__ \ + ("fldl %1\n" \ + "fistpll %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + __CRT_INLINE long long __cdecl llrintf (float x) + { + long long retval; + __asm__ __volatile__ \ + ("flds %1\n" \ + "fistpll %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + __CRT_INLINE long long __cdecl llrintl (long double x) + { + long long retval; + __asm__ __volatile__ \ + ("fldt %1\n" \ + "fistpll %0" : "=m" (retval) : "m" (x)); \ + return retval; + } + + #define FE_TONEAREST 0x0000 + #define FE_DOWNWARD 0x0400 + #define FE_UPWARD 0x0800 + #define FE_TOWARDZERO 0x0c00 + + __CRT_INLINE double trunc (double _x) + { + double retval; + unsigned short saved_cw; + unsigned short tmp_cw; + __asm__ ("fnstcw %0;" : "=m" (saved_cw)); /* save FPU control word */ + tmp_cw = (saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO)) + | FE_TOWARDZERO; + __asm__ ("fldcw %0;" : : "m" (tmp_cw)); + __asm__ ("fldl %1;" + "frndint;" + "fstl %0;" : "=m" (retval) : "m" (_x)); /* round towards zero */ + __asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */ + return retval; + } + + /* 7.12.9.6 */ + /* round away from zero, regardless of fpu control word settings */ + extern double __cdecl round (double); + extern float __cdecl roundf (float); + extern long double __cdecl roundl (long double); + + /* 7.12.9.7 */ + extern long __cdecl lround (double); + extern long __cdecl lroundf (float); + extern long __cdecl lroundl (long double); + + extern long long __cdecl llround (double); + extern long long __cdecl llroundf (float); + extern long long __cdecl llroundl (long double); + + /* 7.12.9.8 */ + /* round towards zero, regardless of fpu control word settings */ + extern double __cdecl trunc (double); + extern float __cdecl truncf (float); + extern long double __cdecl truncl (long double); + + extern long double __cdecl fmodl (long double, long double); + + /* 7.12.10.2 */ + extern double __cdecl remainder (double, double); + extern float __cdecl remainderf (float, float); + extern long double __cdecl remainderl (long double, long double); + + /* 7.12.10.3 */ + extern double __cdecl remquo(double, double, int *); + extern float __cdecl remquof(float, float, int *); + extern long double __cdecl remquol(long double, long double, int *); + + /* 7.12.11.1 */ + extern double __cdecl copysign (double, double); /* in libmoldname.a */ + extern float __cdecl copysignf (float, float); + extern long double __cdecl copysignl (long double, long double); + + /* 7.12.11.2 Return a NaN */ + extern double __cdecl nan(const char *tagp); + extern float __cdecl nanf(const char *tagp); + extern long double __cdecl nanl(const char *tagp); + +#ifndef __STRICT_ANSI__ +#define _nan() nan("") +#define _nanf() nanf("") +#define _nanl() nanl("") +#endif + + /* 7.12.11.3 */ + extern double __cdecl nextafter (double, double); /* in libmoldname.a */ + extern float __cdecl nextafterf (float, float); + extern long double __cdecl nextafterl (long double, long double); + + /* 7.12.11.4 The nexttoward functions: TODO */ + + /* 7.12.12.1 */ + /* x > y ? (x - y) : 0.0 */ + extern double __cdecl fdim (double x, double y); + extern float __cdecl fdimf (float x, float y); + extern long double __cdecl fdiml (long double x, long double y); + + /* fmax and fmin. + NaN arguments are treated as missing data: if one argument is a NaN + and the other numeric, then these functions choose the numeric + value. */ + + /* 7.12.12.2 */ + extern double __cdecl fmax (double, double); + extern float __cdecl fmaxf (float, float); + extern long double __cdecl fmaxl (long double, long double); + + /* 7.12.12.3 */ + extern double __cdecl fmin (double, double); + extern float __cdecl fminf (float, float); + extern long double __cdecl fminl (long double, long double); + + /* 7.12.13.1 */ + /* return x * y + z as a ternary op */ + extern double __cdecl fma (double, double, double); + extern float __cdecl fmaf (float, float, float); + extern long double __cdecl fmal (long double, long double, long double); + + +#if 0 // gr: duplicate, see below + /* 7.12.14 */ + /* + * With these functions, comparisons involving quiet NaNs set the FP + * condition code to "unordered". The IEEE floating-point spec + * dictates that the result of floating-point comparisons should be + * false whenever a NaN is involved, with the exception of the != op, + * which always returns true: yes, (NaN != NaN) is true). + */ + +#if __GNUC__ >= 3 + +#define isgreater(x, y) __builtin_isgreater(x, y) +#define isgreaterequal(x, y) __builtin_isgreaterequal(x, y) +#define isless(x, y) __builtin_isless(x, y) +#define islessequal(x, y) __builtin_islessequal(x, y) +#define islessgreater(x, y) __builtin_islessgreater(x, y) +#define isunordered(x, y) __builtin_isunordered(x, y) + +#else + /* helper */ + __CRT_INLINE int __cdecl + __fp_unordered_compare (long double x, long double y){ + unsigned short retval; + __asm__ ("fucom %%st(1);" + "fnstsw;": "=a" (retval) : "t" (x), "u" (y)); + return retval; + } + +#define isgreater(x, y) ((__fp_unordered_compare(x, y) \ + & 0x4500) == 0) +#define isless(x, y) ((__fp_unordered_compare (y, x) \ + & 0x4500) == 0) +#define isgreaterequal(x, y) ((__fp_unordered_compare (x, y) \ + & FP_INFINITE) == 0) +#define islessequal(x, y) ((__fp_unordered_compare(y, x) \ + & FP_INFINITE) == 0) +#define islessgreater(x, y) ((__fp_unordered_compare(x, y) \ + & FP_SUBNORMAL) == 0) +#define isunordered(x, y) ((__fp_unordered_compare(x, y) \ + & 0x4500) == 0x4500) + +#endif +#endif //0 + + +#endif /* __STDC_VERSION__ >= 199901L */ +#endif /* __NO_ISOCEXT */ + +#ifdef __cplusplus +} +extern "C++" { + template inline _Ty _Pow_int(_Ty _X,int _Y) { + unsigned int _N; + if(_Y >= 0) _N = (unsigned int)_Y; + else _N = (unsigned int)(-_Y); + for(_Ty _Z = _Ty(1);;_X *= _X) { + if((_N & 1)!=0) _Z *= _X; + if((_N >>= 1)==0) return (_Y < 0 ? _Ty(1) / _Z : _Z); + } + } +} +#endif + +#pragma pack(pop) + +/* 7.12.14 */ +/* + * With these functions, comparisons involving quiet NaNs set the FP + * condition code to "unordered". The IEEE floating-point spec + * dictates that the result of floating-point comparisons should be + * false whenever a NaN is involved, with the exception of the != op, + * which always returns true: yes, (NaN != NaN) is true). + */ + +/* Mini libm (inline __fpclassify*, __signbit* and variants) */ + +/* TCC uses 8 bytes for double and long double, so effectively the l variants + * are never used. For now, they just run the normal (double) variant. + */ + +/* + * most of the code in this file is taken from MUSL rs-1.0 (MIT license) + * - musl-libc: http://git.musl-libc.org/cgit/musl/tree/src/math?h=rs-1.0 + * - License: http://git.musl-libc.org/cgit/musl/tree/COPYRIGHT?h=rs-1.0 + */ + +/******************************************************************************* + Start of code based on MUSL +*******************************************************************************/ +/* +musl as a whole is licensed under the following standard MIT license: + +---------------------------------------------------------------------- +Copyright © 2005-2014 Rich Felker, et al. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------------------------- +*/ + +/* fpclassify */ + +__CRT_INLINE int __cdecl __fpclassify (double x) { + union {double f; uint64_t i;} u = {x}; + int e = u.i>>52 & 0x7ff; + if (!e) return u.i<<1 ? FP_SUBNORMAL : FP_ZERO; + if (e==0x7ff) return u.i<<12 ? FP_NAN : FP_INFINITE; + return FP_NORMAL; +} + +__CRT_INLINE int __cdecl __fpclassifyf (float x) { + union {float f; uint32_t i;} u = {x}; + int e = u.i>>23 & 0xff; + if (!e) return u.i<<1 ? FP_SUBNORMAL : FP_ZERO; + if (e==0xff) return u.i<<9 ? FP_NAN : FP_INFINITE; + return FP_NORMAL; +} + +__CRT_INLINE int __cdecl __fpclassifyl (long double x) { + return __fpclassify(x); +} + + +/* signbit */ + +__CRT_INLINE int __cdecl __signbit (double x) { + union {double d; uint64_t i;} y = { x }; + return y.i>>63; +} + +__CRT_INLINE int __cdecl __signbitf (float x) { + union {float f; uint32_t i; } y = { x }; + return y.i>>31; +} + +__CRT_INLINE int __cdecl __signbitl (long double x) { + return __signbit(x); +} + + +/* fmin*, fmax* */ + +#define TCCFP_FMIN_EVAL (isnan(x) ? y : \ + isnan(y) ? x : \ + (signbit(x) != signbit(y)) ? (signbit(x) ? x : y) : \ + x < y ? x : y) + +__CRT_INLINE double __cdecl fmin (double x, double y) { + return TCCFP_FMIN_EVAL; +} + +__CRT_INLINE float __cdecl fminf (float x, float y) { + return TCCFP_FMIN_EVAL; +} + +__CRT_INLINE long double __cdecl fminl (long double x, long double y) { + return TCCFP_FMIN_EVAL; +} + +#define TCCFP_FMAX_EVAL (isnan(x) ? y : \ + isnan(y) ? x : \ + (signbit(x) != signbit(y)) ? (signbit(x) ? y : x) : \ + x < y ? y : x) + +__CRT_INLINE double __cdecl fmax (double x, double y) { + return TCCFP_FMAX_EVAL; +} + +__CRT_INLINE float __cdecl fmaxf (float x, float y) { + return TCCFP_FMAX_EVAL; +} + +__CRT_INLINE long double __cdecl fmaxl (long double x, long double y) { + return TCCFP_FMAX_EVAL; +} + + +/* *round* */ + +#define TCCFP_FORCE_EVAL(x) do { \ +if (sizeof(x) == sizeof(float)) { \ + volatile float __x; \ + __x = (x); \ +} else if (sizeof(x) == sizeof(double)) { \ + volatile double __x; \ + __x = (x); \ +} else { \ + volatile long double __x; \ + __x = (x); \ +} \ +} while(0) + +__CRT_INLINE double __cdecl round (double x) { + union {double f; uint64_t i;} u = {x}; + int e = u.i >> 52 & 0x7ff; + double y; + + if (e >= 0x3ff+52) + return x; + if (u.i >> 63) + x = -x; + if (e < 0x3ff-1) { + /* raise inexact if x!=0 */ + TCCFP_FORCE_EVAL(x + 0x1p52); + return 0*u.f; + } + y = (double)(x + 0x1p52) - 0x1p52 - x; + if (y > 0.5) + y = y + x - 1; + else if (y <= -0.5) + y = y + x + 1; + else + y = y + x; + if (u.i >> 63) + y = -y; + return y; +} + +__CRT_INLINE long __cdecl lround (double x) { + return round(x); +} + +__CRT_INLINE long long __cdecl llround (double x) { + return round(x); +} + +__CRT_INLINE float __cdecl roundf (float x) { + return round(x); +} + +__CRT_INLINE long __cdecl lroundf (float x) { + return round(x); +} + +__CRT_INLINE long long __cdecl llroundf (float x) { + return round(x); +} + +__CRT_INLINE long double __cdecl roundl (long double x) { + return round(x); +} + +__CRT_INLINE long __cdecl lroundl (long double x) { + return round(x); +} + +__CRT_INLINE long long __cdecl llroundl (long double x) { + return round(x); +} + + + +#endif /* End _MATH_H_ */ + diff --git a/colorchord2/windows/mmsystem.h b/colorchord2/windows/mmsystem.h new file mode 100644 index 0000000..3eb06a4 --- /dev/null +++ b/colorchord2/windows/mmsystem.h @@ -0,0 +1,1950 @@ + +#ifndef _MMSYSTEM_H +#define _MMSYSTEM_H +#if __GNUC__ >=3 +#pragma GCC system_header +#endif +#pragma pack(push,1) +#ifdef __cplusplus +extern "C" { +#endif + +#if defined( TCC ) || defined (TinyCC) || defined(TINYCC) +#define _STRUCT_NAME(x) x +typedef UINT* LPUINT; +#endif + +#define WINMMAPI DECLSPEC_IMPORT +#define _loadds +#define _huge +#define MAXPNAMELEN 32 +#define MAXERRORLENGTH 256 +#define MAX_JOYSTICKOEMVXDNAME 260 +#define _MMRESULT_ +#define TIME_MS 1 +#define TIME_SAMPLES 2 +#define TIME_BYTES 4 +#define TIME_SMPTE 8 +#define TIME_MIDI 16 +#define TIME_TICKS 32 +#define MAKEFOURCC(c0,c1,c2,c3) ((DWORD)(BYTE)(c0)|((DWORD)(BYTE)(c1)<<8)|((DWORD)(BYTE)(c2)<<16)|((DWORD)(BYTE)(c3)<<24)) +#ifndef mmioFOURCC +#define mmioFOURCC(c0,c1,c2,c3) MAKEFOURCC(c0,c1,c2,c3) +#endif +#define MM_JOY1MOVE 0x3A0 +#define MM_JOY2MOVE 0x3A1 +#define MM_JOY1ZMOVE 0x3A2 +#define MM_JOY2ZMOVE 0x3A3 +#define MM_JOY1BUTTONDOWN 0x3B5 +#define MM_JOY2BUTTONDOWN 0x3B6 +#define MM_JOY1BUTTONUP 0x3B7 +#define MM_JOY2BUTTONUP 0x3B8 +#define MM_MCINOTIFY 0x3B9 +#define MM_WOM_OPEN 0x3BB +#define MM_WOM_CLOSE 0x3BC +#define MM_WOM_DONE 0x3BD +#define MM_WIM_OPEN 0x3BE +#define MM_WIM_CLOSE 0x3BF +#define MM_WIM_DATA 0x3C0 +#define MM_MIM_OPEN 0x3C1 +#define MM_MIM_CLOSE 0x3C2 +#define MM_MIM_DATA 0x3C3 +#define MM_MIM_LONGDATA 0x3C4 +#define MM_MIM_ERROR 0x3C5 +#define MM_MIM_LONGERROR 0x3C6 +#define MM_MOM_OPEN 0x3C7 +#define MM_MOM_CLOSE 0x3C8 +#define MM_MOM_DONE 0x3C9 +#define MM_DRVM_OPEN 0x3D0 +#define MM_DRVM_CLOSE 0x3D1 +#define MM_DRVM_DATA 0x3D2 +#define MM_DRVM_ERROR 0x3D3 +#define MM_STREAM_OPEN 0x3D4 +#define MM_STREAM_CLOSE 0x3D5 +#define MM_STREAM_DONE 0x3D6 +#define MM_STREAM_ERROR 0x3D7 +#define MM_MOM_POSITIONCB 0x3CA +#define MM_MCISIGNAL 0x3CB +#define MM_MIM_MOREDATA 0x3CC +#define MM_MIXM_LINE_CHANGE 0x3D0 +#define MM_MIXM_CONTROL_CHANGE 0x3D1 +#define MMSYSERR_BASE 0 +#define WAVERR_BASE 32 +#define MIDIERR_BASE 64 +#define TIMERR_BASE 96 +#define JOYERR_BASE 160 +#define MCIERR_BASE 256 +#define MIXERR_BASE 1024 +#define MCI_STRING_OFFSET 512 +#define MCI_VD_OFFSET 1024 +#define MCI_CD_OFFSET 1088 +#define MCI_WAVE_OFFSET 1152 +#define MCI_SEQ_OFFSET 1216 +#define MMSYSERR_NOERROR 0 +#define MMSYSERR_ERROR (MMSYSERR_BASE+1) +#define MMSYSERR_BADDEVICEID (MMSYSERR_BASE+2) +#define MMSYSERR_NOTENABLED (MMSYSERR_BASE+3) +#define MMSYSERR_ALLOCATED (MMSYSERR_BASE+4) +#define MMSYSERR_INVALHANDLE (MMSYSERR_BASE+5) +#define MMSYSERR_NODRIVER (MMSYSERR_BASE+6) +#define MMSYSERR_NOMEM (MMSYSERR_BASE+7) +#define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE+8) +#define MMSYSERR_BADERRNUM (MMSYSERR_BASE+9) +#define MMSYSERR_INVALFLAG (MMSYSERR_BASE+10) +#define MMSYSERR_INVALPARAM (MMSYSERR_BASE+11) +#define MMSYSERR_HANDLEBUSY (MMSYSERR_BASE+12) +#define MMSYSERR_INVALIDALIAS (MMSYSERR_BASE+13) +#define MMSYSERR_BADDB (MMSYSERR_BASE+14) +#define MMSYSERR_KEYNOTFOUND (MMSYSERR_BASE+15) +#define MMSYSERR_READERROR (MMSYSERR_BASE+16) +#define MMSYSERR_WRITEERROR (MMSYSERR_BASE+17) +#define MMSYSERR_DELETEERROR (MMSYSERR_BASE+18) +#define MMSYSERR_VALNOTFOUND (MMSYSERR_BASE+19) +#define MMSYSERR_NODRIVERCB (MMSYSERR_BASE+20) +#define MMSYSERR_LASTERROR (MMSYSERR_BASE+20) +#define DRV_LOAD 1 +#define DRV_ENABLE 2 +#define DRV_OPEN 3 +#define DRV_CLOSE 4 +#define DRV_DISABLE 5 +#define DRV_FREE 6 +#define DRV_CONFIGURE 7 +#define DRV_QUERYCONFIGURE 8 +#define DRV_INSTALL 9 +#define DRV_REMOVE 10 +#define DRV_EXITSESSION 11 +#define DRV_POWER 15 +#define DRV_RESERVED 0x800 +#define DRV_USER 0x4000 +#define DRVCNF_CANCEL 0 +#define DRVCNF_OK 1 +#define DRVCNF_RESTART 2 +#define DRV_CANCEL DRVCNF_CANCEL +#define DRV_OK DRVCNF_OK +#define DRV_RESTART DRVCNF_RESTART +#define DRV_MCI_FIRST DRV_RESERVED +#define DRV_MCI_LAST (DRV_RESERVED+0xFFF) +#define CALLBACK_TYPEMASK 0x70000 +#define CALLBACK_NULL 0 +#define CALLBACK_WINDOW 0x10000 +#define CALLBACK_TASK 0x20000 +#define CALLBACK_FUNCTION 0x30000 +#define CALLBACK_THREAD CALLBACK_TASK +#define CALLBACK_EVENT 0x50000 +#define SND_SYNC 0 +#define SND_ASYNC 1 +#define SND_NODEFAULT 2 +#define SND_MEMORY 4 +#define SND_LOOP 8 +#define SND_NOSTOP 16 +#define SND_NOWAIT 0x2000 +#define SND_ALIAS 0x10000 +#define SND_ALIAS_ID 0x110000 +#define SND_FILENAME 0x20000 +#define SND_RESOURCE 0x40004 +#define SND_PURGE 0x40 +#define SND_APPLICATION 0x80 +#define SND_ALIAS_START 0 +#define sndAlias(c0,c1) (SND_ALIAS_START+(DWORD)(BYTE)(c0)|((DWORD)(BYTE)(c1)<<8)) +#define SND_ALIAS_SYSTEMASTERISK sndAlias('S','*') +#define SND_ALIAS_SYSTEMQUESTION sndAlias('S','?') +#define SND_ALIAS_SYSTEMHAND sndAlias('S','H') +#define SND_ALIAS_SYSTEMEXIT sndAlias('S','E') +#define SND_ALIAS_SYSTEMSTART sndAlias('S','S') +#define SND_ALIAS_SYSTEMWELCOME sndAlias('S','W') +#define SND_ALIAS_SYSTEMEXCLAMATION sndAlias('S','!') +#define SND_ALIAS_SYSTEMDEFAULT sndAlias('S','D') +#define WAVERR_BADFORMAT (WAVERR_BASE + 0) +#define WAVERR_STILLPLAYING (WAVERR_BASE + 1) +#define WAVERR_UNPREPARED (WAVERR_BASE + 2) +#define WAVERR_SYNC (WAVERR_BASE + 3) +#define WAVERR_LASTERROR (WAVERR_BASE + 3) +#define WOM_OPEN MM_WOM_OPEN +#define WOM_CLOSE MM_WOM_CLOSE +#define WOM_DONE MM_WOM_DONE +#define WIM_OPEN MM_WIM_OPEN +#define WIM_CLOSE MM_WIM_CLOSE +#define WIM_DATA MM_WIM_DATA +#define WAVE_MAPPER ((UINT)-1) +#define WAVE_FORMAT_QUERY 1 +#define WAVE_ALLOWSYNC 2 +#define WAVE_MAPPED 4 +#define WAVE_FORMAT_DIRECT 8 +#define WAVE_FORMAT_DIRECT_QUERY (WAVE_FORMAT_QUERY|WAVE_FORMAT_DIRECT) +#define WHDR_DONE 1 +#define WHDR_PREPARED 2 +#define WHDR_BEGINLOOP 4 +#define WHDR_ENDLOOP 8 +#define WHDR_INQUEUE 16 +#define WAVECAPS_PITCH 1 +#define WAVECAPS_PLAYBACKRATE 2 +#define WAVECAPS_VOLUME 4 +#define WAVECAPS_LRVOLUME 8 +#define WAVECAPS_SYNC 16 +#define WAVECAPS_SAMPLEACCURATE 32 +#define WAVECAPS_DIRECTSOUND 64 +#define WAVE_INVALIDFORMAT 0 +#define WAVE_FORMAT_1M08 1 +#define WAVE_FORMAT_1S08 2 +#define WAVE_FORMAT_1M16 4 +#define WAVE_FORMAT_1S16 8 +#define WAVE_FORMAT_2M08 16 +#define WAVE_FORMAT_2S08 32 +#define WAVE_FORMAT_2M16 64 +#define WAVE_FORMAT_2S16 128 +#define WAVE_FORMAT_4M08 256 +#define WAVE_FORMAT_4S08 512 +#define WAVE_FORMAT_4M16 1024 +#define WAVE_FORMAT_4S16 2048 +#define WAVE_FORMAT_PCM 1 +#define WAVE_FORMAT_EXTENSIBLE 0xFFFE +#define MIDIERR_UNPREPARED MIDIERR_BASE +#define MIDIERR_STILLPLAYING (MIDIERR_BASE+1) +#define MIDIERR_NOMAP (MIDIERR_BASE+2) +#define MIDIERR_NOTREADY (MIDIERR_BASE+3) +#define MIDIERR_NODEVICE (MIDIERR_BASE+4) +#define MIDIERR_INVALIDSETUP (MIDIERR_BASE+5) +#define MIDIERR_BADOPENMODE (MIDIERR_BASE+6) +#define MIDIERR_DONT_CONTINUE (MIDIERR_BASE+7) +#define MIDIERR_LASTERROR (MIDIERR_BASE+7) +#define MIDIPATCHSIZE 128 +#define MIM_OPEN MM_MIM_OPEN +#define MIM_CLOSE MM_MIM_CLOSE +#define MIM_DATA MM_MIM_DATA +#define MIM_LONGDATA MM_MIM_LONGDATA +#define MIM_ERROR MM_MIM_ERROR +#define MIM_LONGERROR MM_MIM_LONGERROR +#define MOM_OPEN MM_MOM_OPEN +#define MOM_CLOSE MM_MOM_CLOSE +#define MOM_DONE MM_MOM_DONE +#define MIM_MOREDATA MM_MIM_MOREDATA +#define MOM_POSITIONCB MM_MOM_POSITIONCB +#define MIDIMAPPER ((UINT)-1) +#define MIDI_MAPPER ((UINT)-1) +#define MIDI_IO_STATUS 32 +#define MIDI_CACHE_ALL 1 +#define MIDI_CACHE_BESTFIT 2 +#define MIDI_CACHE_QUERY 3 +#define MIDI_UNCACHE 4 +#define MOD_MIDIPORT 1 +#define MOD_SYNTH 2 +#define MOD_SQSYNTH 3 +#define MOD_FMSYNTH 4 +#define MOD_MAPPER 5 +#define MIDICAPS_VOLUME 1 +#define MIDICAPS_LRVOLUME 2 +#define MIDICAPS_CACHE 4 +#define MIDICAPS_STREAM 8 +#define MHDR_DONE 1 +#define MHDR_PREPARED 2 +#define MHDR_INQUEUE 4 +#define MHDR_ISSTRM 8 +#define MEVT_F_SHORT 0 +#define MEVT_F_LONG 0x80000000 +#define MEVT_F_CALLBACK 0x40000000 +#define MEVT_EVENTTYPE(x) ((BYTE)(((x)>>24)&0xFF)) +#define MEVT_EVENTPARM(x) ((DWORD)((x)&0xFFFFFFL)) +#define MEVT_SHORTMSG 0 +#define MEVT_TEMPO 1 +#define MEVT_NOP 2 +#define MEVT_LONGMSG ((BYTE)0x80) +#define MEVT_COMMENT ((BYTE)0x82) +#define MEVT_VERSION ((BYTE)0x84) +#define MIDISTRM_ERROR (-2) +#define MIDIPROP_SET 0x80000000 +#define MIDIPROP_GET 0x40000000 +#define MIDIPROP_TIMEDIV 1 +#define MIDIPROP_TEMPO 2 +#define AUX_MAPPER ((UINT)-1) +#define AUXCAPS_CDAUDIO 1 +#define AUXCAPS_AUXIN 2 +#define AUXCAPS_VOLUME 1 +#define AUXCAPS_LRVOLUME 2 +#define MIXER_SHORT_NAME_CHARS 16 +#define MIXER_LONG_NAME_CHARS 64 +#define MIXERR_INVALLINE MIXERR_BASE +#define MIXERR_INVALCONTROL (MIXERR_BASE+1) +#define MIXERR_INVALVALUE (MIXERR_BASE+2) +#define MIXERR_LASTERROR (MIXERR_BASE+2) +#define MIXER_OBJECTF_HANDLE 0x80000000 +#define MIXER_OBJECTF_MIXER 0 +#define MIXER_OBJECTF_HMIXER (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER) +#define MIXER_OBJECTF_WAVEOUT 0x10000000 +#define MIXER_OBJECTF_HWAVEOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT) +#define MIXER_OBJECTF_WAVEIN 0x20000000 +#define MIXER_OBJECTF_HWAVEIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN) +#define MIXER_OBJECTF_MIDIOUT 0x30000000 +#define MIXER_OBJECTF_HMIDIOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT) +#define MIXER_OBJECTF_MIDIIN 0x40000000 +#define MIXER_OBJECTF_HMIDIIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN) +#define MIXER_OBJECTF_AUX 0x50000000 +#define MIXERLINE_LINEF_ACTIVE 1 +#define MIXERLINE_LINEF_DISCONNECTED 0x8000 +#define MIXERLINE_LINEF_SOURCE 0x80000000 +#define MIXERLINE_COMPONENTTYPE_DST_FIRST 0 +#define MIXERLINE_COMPONENTTYPE_DST_UNDEFINED MIXERLINE_COMPONENTTYPE_DST_FIRST +#define MIXERLINE_COMPONENTTYPE_DST_DIGITAL (MIXERLINE_COMPONENTTYPE_DST_FIRST+1) +#define MIXERLINE_COMPONENTTYPE_DST_LINE (MIXERLINE_COMPONENTTYPE_DST_FIRST+2) +#define MIXERLINE_COMPONENTTYPE_DST_MONITOR (MIXERLINE_COMPONENTTYPE_DST_FIRST+3) +#define MIXERLINE_COMPONENTTYPE_DST_SPEAKERS (MIXERLINE_COMPONENTTYPE_DST_FIRST+4) +#define MIXERLINE_COMPONENTTYPE_DST_HEADPHONES (MIXERLINE_COMPONENTTYPE_DST_FIRST+5) +#define MIXERLINE_COMPONENTTYPE_DST_TELEPHONE (MIXERLINE_COMPONENTTYPE_DST_FIRST+6) +#define MIXERLINE_COMPONENTTYPE_DST_WAVEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST+7) +#define MIXERLINE_COMPONENTTYPE_DST_VOICEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST+8) +#define MIXERLINE_COMPONENTTYPE_DST_LAST (MIXERLINE_COMPONENTTYPE_DST_FIRST+8) +#define MIXERLINE_COMPONENTTYPE_SRC_FIRST 0x1000 +#define MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED MIXERLINE_COMPONENTTYPE_SRC_FIRST +#define MIXERLINE_COMPONENTTYPE_SRC_DIGITAL (MIXERLINE_COMPONENTTYPE_SRC_FIRST+1) +#define MIXERLINE_COMPONENTTYPE_SRC_LINE (MIXERLINE_COMPONENTTYPE_SRC_FIRST+2) +#define MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST+3) +#define MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER (MIXERLINE_COMPONENTTYPE_SRC_FIRST+4) +#define MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC (MIXERLINE_COMPONENTTYPE_SRC_FIRST+5) +#define MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST+6) +#define MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER (MIXERLINE_COMPONENTTYPE_SRC_FIRST+7) +#define MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT (MIXERLINE_COMPONENTTYPE_SRC_FIRST+8) +#define MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY (MIXERLINE_COMPONENTTYPE_SRC_FIRST+9) +#define MIXERLINE_COMPONENTTYPE_SRC_ANALOG (MIXERLINE_COMPONENTTYPE_SRC_FIRST+10) +#define MIXERLINE_COMPONENTTYPE_SRC_LAST (MIXERLINE_COMPONENTTYPE_SRC_FIRST+10) +#define MIXERLINE_TARGETTYPE_UNDEFINED 0 +#define MIXERLINE_TARGETTYPE_WAVEOUT 1 +#define MIXERLINE_TARGETTYPE_WAVEIN 2 +#define MIXERLINE_TARGETTYPE_MIDIOUT 3 +#define MIXERLINE_TARGETTYPE_MIDIIN 4 +#define MIXERLINE_TARGETTYPE_AUX 5 +#define MIXER_GETLINEINFOF_DESTINATION 0 +#define MIXER_GETLINEINFOF_SOURCE 1 +#define MIXER_GETLINEINFOF_LINEID 2 +#define MIXER_GETLINEINFOF_COMPONENTTYPE 3 +#define MIXER_GETLINEINFOF_TARGETTYPE 4 +#define MIXER_GETLINEINFOF_QUERYMASK 15 +#define MIXERCONTROL_CONTROLF_UNIFORM 1 +#define MIXERCONTROL_CONTROLF_MULTIPLE 2 +#define MIXERCONTROL_CONTROLF_DISABLED 0x80000000 +#define MIXERCONTROL_CT_CLASS_MASK 0xF0000000 +#define MIXERCONTROL_CT_CLASS_CUSTOM 0 +#define MIXERCONTROL_CT_CLASS_METER 0x10000000 +#define MIXERCONTROL_CT_CLASS_SWITCH 0x20000000 +#define MIXERCONTROL_CT_CLASS_NUMBER 0x30000000 +#define MIXERCONTROL_CT_CLASS_SLIDER 0x40000000 +#define MIXERCONTROL_CT_CLASS_FADER 0x50000000 +#define MIXERCONTROL_CT_CLASS_TIME 0x60000000 +#define MIXERCONTROL_CT_CLASS_LIST 0x70000000 +#define MIXERCONTROL_CT_SUBCLASS_MASK 0xF000000 +#define MIXERCONTROL_CT_SC_SWITCH_BOOLEAN 0 +#define MIXERCONTROL_CT_SC_SWITCH_BUTTON 0x1000000 +#define MIXERCONTROL_CT_SC_METER_POLLED 0 +#define MIXERCONTROL_CT_SC_TIME_MICROSECS 0 +#define MIXERCONTROL_CT_SC_TIME_MILLISECS 0x1000000 +#define MIXERCONTROL_CT_SC_LIST_SINGLE 0 +#define MIXERCONTROL_CT_SC_LIST_MULTIPLE 0x1000000 +#define MIXERCONTROL_CT_UNITS_MASK 0xFF0000 +#define MIXERCONTROL_CT_UNITS_CUSTOM 0 +#define MIXERCONTROL_CT_UNITS_BOOLEAN 0x10000 +#define MIXERCONTROL_CT_UNITS_SIGNED 0x20000 +#define MIXERCONTROL_CT_UNITS_UNSIGNED 0x30000 +#define MIXERCONTROL_CT_UNITS_DECIBELS 0x40000 +#define MIXERCONTROL_CT_UNITS_PERCENT 0x50000 +#define MIXERCONTROL_CONTROLTYPE_CUSTOM (MIXERCONTROL_CT_CLASS_CUSTOM|MIXERCONTROL_CT_UNITS_CUSTOM) +#define MIXERCONTROL_CONTROLTYPE_BOOLEANMETER (MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_BOOLEAN) +#define MIXERCONTROL_CONTROLTYPE_SIGNEDMETER (MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_SIGNED) +#define MIXERCONTROL_CONTROLTYPE_PEAKMETER (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER+1) +#define MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER (MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_UNSIGNED) +#define MIXERCONTROL_CONTROLTYPE_BOOLEAN (MIXERCONTROL_CT_CLASS_SWITCH|MIXERCONTROL_CT_SC_SWITCH_BOOLEAN|MIXERCONTROL_CT_UNITS_BOOLEAN) +#define MIXERCONTROL_CONTROLTYPE_ONOFF (MIXERCONTROL_CONTROLTYPE_BOOLEAN+1) +#define MIXERCONTROL_CONTROLTYPE_MUTE (MIXERCONTROL_CONTROLTYPE_BOOLEAN+2) +#define MIXERCONTROL_CONTROLTYPE_MONO (MIXERCONTROL_CONTROLTYPE_BOOLEAN+3) +#define MIXERCONTROL_CONTROLTYPE_LOUDNESS (MIXERCONTROL_CONTROLTYPE_BOOLEAN+4) +#define MIXERCONTROL_CONTROLTYPE_STEREOENH (MIXERCONTROL_CONTROLTYPE_BOOLEAN+5) +#define MIXERCONTROL_CONTROLTYPE_BUTTON (MIXERCONTROL_CT_CLASS_SWITCH|MIXERCONTROL_CT_SC_SWITCH_BUTTON|MIXERCONTROL_CT_UNITS_BOOLEAN) +#define MIXERCONTROL_CONTROLTYPE_DECIBELS (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_DECIBELS) +#define MIXERCONTROL_CONTROLTYPE_SIGNED (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_SIGNED) +#define MIXERCONTROL_CONTROLTYPE_UNSIGNED (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_UNSIGNED) +#define MIXERCONTROL_CONTROLTYPE_PERCENT (MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_PERCENT) +#define MIXERCONTROL_CONTROLTYPE_SLIDER (MIXERCONTROL_CT_CLASS_SLIDER|MIXERCONTROL_CT_UNITS_SIGNED) +#define MIXERCONTROL_CONTROLTYPE_PAN (MIXERCONTROL_CONTROLTYPE_SLIDER+1) +#define MIXERCONTROL_CONTROLTYPE_QSOUNDPAN (MIXERCONTROL_CONTROLTYPE_SLIDER+2) +#define MIXERCONTROL_CONTROLTYPE_FADER (MIXERCONTROL_CT_CLASS_FADER|MIXERCONTROL_CT_UNITS_UNSIGNED) +#define MIXERCONTROL_CONTROLTYPE_VOLUME (MIXERCONTROL_CONTROLTYPE_FADER+1) +#define MIXERCONTROL_CONTROLTYPE_BASS (MIXERCONTROL_CONTROLTYPE_FADER+2) +#define MIXERCONTROL_CONTROLTYPE_TREBLE (MIXERCONTROL_CONTROLTYPE_FADER+3) +#define MIXERCONTROL_CONTROLTYPE_EQUALIZER (MIXERCONTROL_CONTROLTYPE_FADER+4) +#define MIXERCONTROL_CONTROLTYPE_SINGLESELECT (MIXERCONTROL_CT_CLASS_LIST|MIXERCONTROL_CT_SC_LIST_SINGLE|MIXERCONTROL_CT_UNITS_BOOLEAN) +#define MIXERCONTROL_CONTROLTYPE_MUX (MIXERCONTROL_CONTROLTYPE_SINGLESELECT+1) +#define MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT (MIXERCONTROL_CT_CLASS_LIST|MIXERCONTROL_CT_SC_LIST_MULTIPLE|MIXERCONTROL_CT_UNITS_BOOLEAN) +#define MIXERCONTROL_CONTROLTYPE_MIXER (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT+1) +#define MIXERCONTROL_CONTROLTYPE_MICROTIME (MIXERCONTROL_CT_CLASS_TIME|MIXERCONTROL_CT_SC_TIME_MICROSECS|MIXERCONTROL_CT_UNITS_UNSIGNED) +#define MIXERCONTROL_CONTROLTYPE_MILLITIME (MIXERCONTROL_CT_CLASS_TIME|MIXERCONTROL_CT_SC_TIME_MILLISECS|MIXERCONTROL_CT_UNITS_UNSIGNED) +#define MIXER_GETLINECONTROLSF_ALL 0 +#define MIXER_GETLINECONTROLSF_ONEBYID 1 +#define MIXER_GETLINECONTROLSF_ONEBYTYPE 2 +#define MIXER_GETLINECONTROLSF_QUERYMASK 15 +#define MIXER_GETCONTROLDETAILSF_VALUE 0 +#define MIXER_GETCONTROLDETAILSF_LISTTEXT 1 +#define MIXER_GETCONTROLDETAILSF_QUERYMASK 15 +#define MIXER_SETCONTROLDETAILSF_VALUE 0 +#define MIXER_SETCONTROLDETAILSF_CUSTOM 1 +#define MIXER_SETCONTROLDETAILSF_QUERYMASK 15 +#define TIMERR_NOERROR 0 +#define TIMERR_NOCANDO (TIMERR_BASE+1) +#define TIMERR_STRUCT (TIMERR_BASE+33) +#define TIME_ONESHOT 0 +#define TIME_PERIODIC 1 +#define TIME_CALLBACK_FUNCTION 0 +#define TIME_CALLBACK_EVENT_SET 16 +#define TIME_CALLBACK_EVENT_PULSE 32 +#if (WINVER >= 0x0501) +#define TIME_KILL_SYNCHRONOUS 0x0100 +#endif +#define JOYERR_NOERROR (0) +#define JOYERR_PARMS (JOYERR_BASE+5) +#define JOYERR_NOCANDO (JOYERR_BASE+6) +#define JOYERR_UNPLUGGED (JOYERR_BASE+7) +#define JOY_BUTTON1 1 +#define JOY_BUTTON2 2 +#define JOY_BUTTON3 4 +#define JOY_BUTTON4 8 +#define JOY_BUTTON1CHG 256 +#define JOY_BUTTON2CHG 512 +#define JOY_BUTTON3CHG 1024 +#define JOY_BUTTON4CHG 2048 +#define JOY_BUTTON5 257 +#define JOY_BUTTON6 513 +#define JOY_BUTTON7 1025 +#define JOY_BUTTON8 2049 +#define JOY_BUTTON9 256 +#define JOY_BUTTON10 512 +#define JOY_BUTTON11 1024 +#define JOY_BUTTON12 2048 +#define JOY_BUTTON13 4096 +#define JOY_BUTTON14 8192 +#define JOY_BUTTON15 16384 +#define JOY_BUTTON16 32768 +#define JOY_BUTTON17 65536 +#define JOY_BUTTON18 0x20000 +#define JOY_BUTTON19 0x40000 +#define JOY_BUTTON20 0x80000 +#define JOY_BUTTON21 0x100000 +#define JOY_BUTTON22 0x200000 +#define JOY_BUTTON23 0x400000 +#define JOY_BUTTON24 0x800000 +#define JOY_BUTTON25 0x1000000 +#define JOY_BUTTON26 0x2000000 +#define JOY_BUTTON27 0x4000000 +#define JOY_BUTTON28 0x8000000 +#define JOY_BUTTON29 0x10000000 +#define JOY_BUTTON30 0x20000000 +#define JOY_BUTTON31 0x40000000 +#define JOY_BUTTON32 0x80000000 +#define JOY_POVCENTERED ((WORD)-1) +#define JOY_POVFORWARD 0 +#define JOY_POVRIGHT 9000 +#define JOY_POVBACKWARD 18000 +#define JOY_POVLEFT 27000 +#define JOY_RETURNX 1 +#define JOY_RETURNY 2 +#define JOY_RETURNZ 4l +#define JOY_RETURNR 8 +#define JOY_RETURNU 16 +#define JOY_RETURNV 32 +#define JOY_RETURNPOV 64 +#define JOY_RETURNBUTTONS 128 +#define JOY_RETURNRAWDATA 256 +#define JOY_RETURNPOVCTS 512 +#define JOY_RETURNCENTERED 1024 +#define JOY_USEDEADZONE 2048 +#define JOY_RETURNALL (JOY_RETURNX|JOY_RETURNY|JOY_RETURNZ|JOY_RETURNR|JOY_RETURNU|JOY_RETURNV|JOY_RETURNPOV|JOY_RETURNBUTTONS) +#define JOY_CAL_READALWAYS 0x10000 +#define JOY_CAL_READXYONLY 0x20000 +#define JOY_CAL_READ3 0x40000 +#define JOY_CAL_READ4 0x80000 +#define JOY_CAL_READXONLY 0x100000 +#define JOY_CAL_READYONLY 0x200000 +#define JOY_CAL_READ5 0x400000 +#define JOY_CAL_READ6 0x800000 +#define JOY_CAL_READZONLY 0x1000000 +#define JOY_CAL_READRONLY 0x2000000 +#define JOY_CAL_READUONLY 0x4000000 +#define JOY_CAL_READVONLY 0x8000000 +#define JOYSTICKID1 0 +#define JOYSTICKID2 1 +#define JOYCAPS_HASZ 1 +#define JOYCAPS_HASR 2 +#define JOYCAPS_HASU 4 +#define JOYCAPS_HASV 8 +#define JOYCAPS_HASPOV 16 +#define JOYCAPS_POV4DIR 32 +#define JOYCAPS_POVCTS 64 +#define MMIOERR_BASE 256 +#define MMIOERR_FILENOTFOUND (MMIOERR_BASE+1) +#define MMIOERR_OUTOFMEMORY (MMIOERR_BASE+2) +#define MMIOERR_CANNOTOPEN (MMIOERR_BASE+3) +#define MMIOERR_CANNOTCLOSE (MMIOERR_BASE+4) +#define MMIOERR_CANNOTREAD (MMIOERR_BASE+5) +#define MMIOERR_CANNOTWRITE (MMIOERR_BASE+6) +#define MMIOERR_CANNOTSEEK (MMIOERR_BASE+7) +#define MMIOERR_CANNOTEXPAND (MMIOERR_BASE+8) +#define MMIOERR_CHUNKNOTFOUND (MMIOERR_BASE+9) +#define MMIOERR_UNBUFFERED (MMIOERR_BASE+10) +#define MMIOERR_PATHNOTFOUND (MMIOERR_BASE+11) +#define MMIOERR_ACCESSDENIED (MMIOERR_BASE+12) +#define MMIOERR_SHARINGVIOLATION (MMIOERR_BASE+13) +#define MMIOERR_NETWORKERROR (MMIOERR_BASE+14) +#define MMIOERR_TOOMANYOPENFILES (MMIOERR_BASE+15) +#define MMIOERR_INVALIDFILE (MMIOERR_BASE+16) +#define CFSEPCHAR '+' +#define MMIO_RWMODE 3 +#define MMIO_SHAREMODE 0x70 +#define MMIO_CREATE 0x1000 +#define MMIO_PARSE 256 +#define MMIO_DELETE 512 +#define MMIO_EXIST 0x4000 +#define MMIO_ALLOCBUF 0x10000 +#define MMIO_GETTEMP 0x20000 +#define MMIO_DIRTY 0x10000000 +#define MMIO_READ 0 +#define MMIO_WRITE 1 +#define MMIO_READWRITE 2 +#define MMIO_COMPAT 0 +#define MMIO_EXCLUSIVE 16 +#define MMIO_DENYWRITE 32 +#define MMIO_DENYREAD 0x30 +#define MMIO_DENYNONE 64 +#define MMIO_FHOPEN 16 +#define MMIO_EMPTYBUF 16 +#define MMIO_TOUPPER 16 +#define MMIO_INSTALLPROC 0x10000 +#define MMIO_GLOBALPROC 0x10000000 +#define MMIO_REMOVEPROC 0x20000 +#define MMIO_UNICODEPROC 0x1000000 +#define MMIO_FINDPROC 0x40000 +#define MMIO_FINDCHUNK 16 +#define MMIO_FINDRIFF 32 +#define MMIO_FINDLIST 64 +#define MMIO_CREATERIFF 32 +#define MMIO_CREATELIST 64 +#define MMIOM_READ MMIO_READ +#define MMIOM_WRITE MMIO_WRITE +#define MMIOM_SEEK 2 +#define MMIOM_OPEN 3 +#define MMIOM_CLOSE 4 +#define MMIOM_WRITEFLUSH 5 +#define MMIOM_RENAME 6 +#define MMIOM_USER 0x8000 +#define FOURCC_RIFF mmioFOURCC('R', 'I', 'F', 'F') +#define FOURCC_LIST mmioFOURCC('L', 'I', 'S', 'T') +#define FOURCC_DOS mmioFOURCC('D', 'O', 'S', ' ') +#define FOURCC_MEM mmioFOURCC('M', 'E', 'M', ' ') +#define MMIO_DEFAULTBUFFER 8192 +#define MCIERR_INVALID_DEVICE_ID (MCIERR_BASE+1) +#define MCIERR_UNRECOGNIZED_KEYWORD (MCIERR_BASE+3) +#define MCIERR_UNRECOGNIZED_COMMAND (MCIERR_BASE+5) +#define MCIERR_HARDWARE (MCIERR_BASE+6) +#define MCIERR_INVALID_DEVICE_NAME (MCIERR_BASE+7) +#define MCIERR_OUT_OF_MEMORY (MCIERR_BASE+8) +#define MCIERR_DEVICE_OPEN (MCIERR_BASE+9) +#define MCIERR_CANNOT_LOAD_DRIVER (MCIERR_BASE+10) +#define MCIERR_MISSING_COMMAND_STRING (MCIERR_BASE+11) +#define MCIERR_PARAM_OVERFLOW (MCIERR_BASE+12) +#define MCIERR_MISSING_STRING_ARGUMENT (MCIERR_BASE+13) +#define MCIERR_BAD_INTEGER (MCIERR_BASE+14) +#define MCIERR_PARSER_INTERNAL (MCIERR_BASE+15) +#define MCIERR_DRIVER_INTERNAL (MCIERR_BASE+16) +#define MCIERR_MISSING_PARAMETER (MCIERR_BASE+17) +#define MCIERR_UNSUPPORTED_FUNCTION (MCIERR_BASE+18) +#define MCIERR_FILE_NOT_FOUND (MCIERR_BASE+19) +#define MCIERR_DEVICE_NOT_READY (MCIERR_BASE+20) +#define MCIERR_INTERNAL (MCIERR_BASE+21) +#define MCIERR_DRIVER (MCIERR_BASE+22) +#define MCIERR_CANNOT_USE_ALL (MCIERR_BASE+23) +#define MCIERR_MULTIPLE (MCIERR_BASE+24) +#define MCIERR_EXTENSION_NOT_FOUND (MCIERR_BASE+25) +#define MCIERR_OUTOFRANGE (MCIERR_BASE+26) +#define MCIERR_FLAGS_NOT_COMPATIBLE (MCIERR_BASE+28) +#define MCIERR_FILE_NOT_SAVED (MCIERR_BASE+30) +#define MCIERR_DEVICE_TYPE_REQUIRED (MCIERR_BASE+31) +#define MCIERR_DEVICE_LOCKED (MCIERR_BASE+32) +#define MCIERR_DUPLICATE_ALIAS (MCIERR_BASE+33) +#define MCIERR_BAD_CONSTANT (MCIERR_BASE+34) +#define MCIERR_MUST_USE_SHAREABLE (MCIERR_BASE+35) +#define MCIERR_MISSING_DEVICE_NAME (MCIERR_BASE+36) +#define MCIERR_BAD_TIME_FORMAT (MCIERR_BASE+37) +#define MCIERR_NO_CLOSING_QUOTE (MCIERR_BASE+38) +#define MCIERR_DUPLICATE_FLAGS (MCIERR_BASE+39) +#define MCIERR_INVALID_FILE (MCIERR_BASE+40) +#define MCIERR_NULL_PARAMETER_BLOCK (MCIERR_BASE+41) +#define MCIERR_UNNAMED_RESOURCE (MCIERR_BASE+42) +#define MCIERR_NEW_REQUIRES_ALIAS (MCIERR_BASE+43) +#define MCIERR_NOTIFY_ON_AUTO_OPEN (MCIERR_BASE+44) +#define MCIERR_NO_ELEMENT_ALLOWED (MCIERR_BASE+45) +#define MCIERR_NONAPPLICABLE_FUNCTION (MCIERR_BASE+46) +#define MCIERR_ILLEGAL_FOR_AUTO_OPEN (MCIERR_BASE+47) +#define MCIERR_FILENAME_REQUIRED (MCIERR_BASE+48) +#define MCIERR_EXTRA_CHARACTERS (MCIERR_BASE+49) +#define MCIERR_DEVICE_NOT_INSTALLED (MCIERR_BASE+50) +#define MCIERR_GET_CD (MCIERR_BASE+51) +#define MCIERR_SET_CD (MCIERR_BASE+52) +#define MCIERR_SET_DRIVE (MCIERR_BASE+53) +#define MCIERR_DEVICE_LENGTH (MCIERR_BASE+54) +#define MCIERR_DEVICE_ORD_LENGTH (MCIERR_BASE+55) +#define MCIERR_NO_INTEGER (MCIERR_BASE+56) +#define MCIERR_WAVE_OUTPUTSINUSE (MCIERR_BASE+64) +#define MCIERR_WAVE_SETOUTPUTINUSE (MCIERR_BASE+65) +#define MCIERR_WAVE_INPUTSINUSE (MCIERR_BASE+66) +#define MCIERR_WAVE_SETINPUTINUSE (MCIERR_BASE+67) +#define MCIERR_WAVE_OUTPUTUNSPECIFIED (MCIERR_BASE+68) +#define MCIERR_WAVE_INPUTUNSPECIFIED (MCIERR_BASE+69) +#define MCIERR_WAVE_OUTPUTSUNSUITABLE (MCIERR_BASE+70) +#define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE+71) +#define MCIERR_WAVE_INPUTSUNSUITABLE (MCIERR_BASE+72) +#define MCIERR_WAVE_SETINPUTUNSUITABLE (MCIERR_BASE+73) +#define MCIERR_SEQ_DIV_INCOMPATIBLE (MCIERR_BASE+80) +#define MCIERR_SEQ_PORT_INUSE (MCIERR_BASE+81) +#define MCIERR_SEQ_PORT_NONEXISTENT (MCIERR_BASE+82) +#define MCIERR_SEQ_PORT_MAPNODEVICE (MCIERR_BASE+83) +#define MCIERR_SEQ_PORT_MISCERROR (MCIERR_BASE+84) +#define MCIERR_SEQ_TIMER (MCIERR_BASE+85) +#define MCIERR_SEQ_PORTUNSPECIFIED (MCIERR_BASE+86) +#define MCIERR_SEQ_NOMIDIPRESENT (MCIERR_BASE+87) +#define MCIERR_NO_WINDOW (MCIERR_BASE+90) +#define MCIERR_CREATEWINDOW (MCIERR_BASE+91) +#define MCIERR_FILE_READ (MCIERR_BASE+92) +#define MCIERR_FILE_WRITE (MCIERR_BASE+93) +#define MCIERR_NO_IDENTITY (MCIERR_BASE+94) +#define MCIERR_CUSTOM_DRIVER_BASE (MCIERR_BASE+256) +#define MCI_FIRST DRV_MCI_FIRST +#define MCI_OPEN 0x803 +#define MCI_CLOSE 0x804 +#define MCI_ESCAPE 0x805 +#define MCI_PLAY 0x806 +#define MCI_SEEK 0x807 +#define MCI_STOP 0x808 +#define MCI_PAUSE 0x809 +#define MCI_INFO 0x80A +#define MCI_GETDEVCAPS 0x80B +#define MCI_SPIN 0x80C +#define MCI_SET 0x80D +#define MCI_STEP 0x80E +#define MCI_RECORD 0x80F +#define MCI_SYSINFO 0x810 +#define MCI_BREAK 0x811 +#define MCI_SAVE 0x813 +#define MCI_STATUS 0x814 +#define MCI_CUE 0x830 +#define MCI_REALIZE 0x840 +#define MCI_WINDOW 0x841 +#define MCI_PUT 0x842 +#define MCI_WHERE 0x843 +#define MCI_FREEZE 0x844 +#define MCI_UNFREEZE 0x845 +#define MCI_LOAD 0x850 +#define MCI_CUT 0x851 +#define MCI_COPY 0x852 +#define MCI_PASTE 0x853 +#define MCI_UPDATE 0x854 +#define MCI_RESUME 0x855 +#define MCI_DELETE 0x856 +#define MCI_USER_MESSAGES (DRV_MCI_FIRST+0x400) +#define MCI_LAST 0xFFF +#define MCI_ALL_DEVICE_ID ((MCIDEVICEID)-1) +#define MCI_DEVTYPE_VCR 513 +#define MCI_DEVTYPE_VIDEODISC 514 +#define MCI_DEVTYPE_OVERLAY 515 +#define MCI_DEVTYPE_CD_AUDIO 516 +#define MCI_DEVTYPE_DAT 517 +#define MCI_DEVTYPE_SCANNER 518 +#define MCI_DEVTYPE_ANIMATION 519 +#define MCI_DEVTYPE_DIGITAL_VIDEO 520 +#define MCI_DEVTYPE_OTHER 521 +#define MCI_DEVTYPE_WAVEFORM_AUDIO 522 +#define MCI_DEVTYPE_SEQUENCER 523 +#define MCI_DEVTYPE_FIRST MCI_DEVTYPE_VCR +#define MCI_DEVTYPE_LAST MCI_DEVTYPE_SEQUENCER +#define MCI_DEVTYPE_FIRST_USER 0x1000 +#define MCI_MODE_NOT_READY (MCI_STRING_OFFSET+12) +#define MCI_MODE_STOP (MCI_STRING_OFFSET+13) +#define MCI_MODE_PLAY (MCI_STRING_OFFSET+14) +#define MCI_MODE_RECORD (MCI_STRING_OFFSET+15) +#define MCI_MODE_SEEK (MCI_STRING_OFFSET+16) +#define MCI_MODE_PAUSE (MCI_STRING_OFFSET+17) +#define MCI_MODE_OPEN (MCI_STRING_OFFSET+18) +#define MCI_FORMAT_MILLISECONDS 0 +#define MCI_FORMAT_HMS 1 +#define MCI_FORMAT_MSF 2 +#define MCI_FORMAT_FRAMES 3 +#define MCI_FORMAT_SMPTE_24 4 +#define MCI_FORMAT_SMPTE_25 5 +#define MCI_FORMAT_SMPTE_30 6 +#define MCI_FORMAT_SMPTE_30DROP 7 +#define MCI_FORMAT_BYTES 8 +#define MCI_FORMAT_SAMPLES 9 +#define MCI_FORMAT_TMSF 10 +#define MCI_MSF_MINUTE(t) ((BYTE)(t)) +#define MCI_MSF_SECOND(t) ((BYTE)(((WORD)(t))>>8)) +#define MCI_MSF_FRAME(t) ((BYTE)((t)>>16)) +#define MCI_MAKE_MSF(m,s,f) ((DWORD)(((BYTE)(m)|((WORD)(s)<<8))|(((DWORD)(BYTE)(f))<<16))) +#define MCI_TMSF_TRACK(t) ((BYTE)(t)) +#define MCI_TMSF_MINUTE(t) ((BYTE)(((WORD)(t))>>8)) +#define MCI_TMSF_SECOND(t) ((BYTE)((t)>>16)) +#define MCI_TMSF_FRAME(t) ((BYTE)((t)>>24)) +#define MCI_MAKE_TMSF(t,m,s,f) ((DWORD)(((BYTE)(t)|((WORD)(m)<<8))|(((DWORD)(BYTE)(s)|((WORD)(f)<<8))<<16))) +#define MCI_HMS_HOUR(t) ((BYTE)(t)) +#define MCI_HMS_MINUTE(t) ((BYTE)(((WORD)(t))>>8)) +#define MCI_HMS_SECOND(t) ((BYTE)((t)>>16)) +#define MCI_MAKE_HMS(h,m,s) ((DWORD)(((BYTE)(h)|((WORD)(m)<<8))|(((DWORD)(BYTE)(s))<<16))) +#define MCI_NOTIFY_SUCCESSFUL 1 +#define MCI_NOTIFY_SUPERSEDED 2 +#define MCI_NOTIFY_ABORTED 4 +#define MCI_NOTIFY_FAILURE 8 +#define MCI_NOTIFY 1 +#define MCI_WAIT 2 +#define MCI_FROM 4 +#define MCI_TO 8 +#define MCI_TRACK 16 +#define MCI_OPEN_SHAREABLE 256 +#define MCI_OPEN_ELEMENT 512 +#define MCI_OPEN_ALIAS 1024 +#define MCI_OPEN_ELEMENT_ID 2048 +#define MCI_OPEN_TYPE_ID 0x1000 +#define MCI_OPEN_TYPE 0x2000 +#define MCI_SEEK_TO_START 256 +#define MCI_SEEK_TO_END 512 +#define MCI_STATUS_ITEM 256 +#define MCI_STATUS_START 512 +#define MCI_STATUS_LENGTH 1 +#define MCI_STATUS_POSITION 2 +#define MCI_STATUS_NUMBER_OF_TRACKS 3 +#define MCI_STATUS_MODE 4 +#define MCI_STATUS_MEDIA_PRESENT 5 +#define MCI_STATUS_TIME_FORMAT 6 +#define MCI_STATUS_READY 7 +#define MCI_STATUS_CURRENT_TRACK 8 +#define MCI_INFO_PRODUCT 256 +#define MCI_INFO_FILE 512 +#define MCI_INFO_MEDIA_UPC 1024 +#define MCI_INFO_MEDIA_IDENTITY 2048 +#define MCI_INFO_NAME 0x1000 +#define MCI_INFO_COPYRIGHT 0x2000 +#define MCI_GETDEVCAPS_ITEM 256 +#define MCI_GETDEVCAPS_CAN_RECORD 1 +#define MCI_GETDEVCAPS_HAS_AUDIO 2 +#define MCI_GETDEVCAPS_HAS_VIDEO 3 +#define MCI_GETDEVCAPS_DEVICE_TYPE 4 +#define MCI_GETDEVCAPS_USES_FILES 5 +#define MCI_GETDEVCAPS_COMPOUND_DEVICE 6 +#define MCI_GETDEVCAPS_CAN_EJECT 7 +#define MCI_GETDEVCAPS_CAN_PLAY 8 +#define MCI_GETDEVCAPS_CAN_SAVE 9 +#define MCI_SYSINFO_QUANTITY 256 +#define MCI_SYSINFO_OPEN 512 +#define MCI_SYSINFO_NAME 1024 +#define MCI_SYSINFO_INSTALLNAME 2048 +#define MCI_SET_DOOR_OPEN 256 +#define MCI_SET_DOOR_CLOSED 512 +#define MCI_SET_TIME_FORMAT 1024 +#define MCI_SET_AUDIO 2048 +#define MCI_SET_VIDEO 0x1000 +#define MCI_SET_ON 0x2000 +#define MCI_SET_OFF 0x4000 +#define MCI_SET_AUDIO_ALL 0 +#define MCI_SET_AUDIO_LEFT 1 +#define MCI_SET_AUDIO_RIGHT 2 +#define MCI_BREAK_KEY 256 +#define MCI_BREAK_HWND 512 +#define MCI_BREAK_OFF 1024 +#define MCI_RECORD_INSERT 256 +#define MCI_RECORD_OVERWRITE 512 +#define MCI_SAVE_FILE 256 +#define MCI_LOAD_FILE 256 +#define MCI_VD_MODE_PARK (MCI_VD_OFFSET+1) +#define MCI_VD_MEDIA_CLV (MCI_VD_OFFSET+2) +#define MCI_VD_MEDIA_CAV (MCI_VD_OFFSET+3) +#define MCI_VD_MEDIA_OTHER (MCI_VD_OFFSET+4) +#define MCI_VD_FORMAT_TRACK 0x4001 +#define MCI_VD_PLAY_REVERSE 0x10000 +#define MCI_VD_PLAY_FAST 0x20000 +#define MCI_VD_PLAY_SPEED 0x40000 +#define MCI_VD_PLAY_SCAN 0x80000 +#define MCI_VD_PLAY_SLOW 0x100000 +#define MCI_VD_SEEK_REVERSE 0x10000 +#define MCI_VD_STATUS_SPEED 0x4002 +#define MCI_VD_STATUS_FORWARD 0x4003 +#define MCI_VD_STATUS_MEDIA_TYPE 0x4004 +#define MCI_VD_STATUS_SIDE 0x4005 +#define MCI_VD_STATUS_DISC_SIZE 0x4006 +#define MCI_VD_GETDEVCAPS_CLV 0x10000 +#define MCI_VD_GETDEVCAPS_CAV 0x20000 +#define MCI_VD_SPIN_UP 0x10000 +#define MCI_VD_SPIN_DOWN 0x20000 +#define MCI_VD_GETDEVCAPS_CAN_REVERSE 0x4002 +#define MCI_VD_GETDEVCAPS_FAST_RATE 0x4003 +#define MCI_VD_GETDEVCAPS_SLOW_RATE 0x4004 +#define MCI_VD_GETDEVCAPS_NORMAL_RATE 0x4005 +#define MCI_VD_STEP_FRAMES 0x10000 +#define MCI_VD_STEP_REVERSE 0x20000 +#define MCI_VD_ESCAPE_STRING 256 +#define MCI_CDA_STATUS_TYPE_TRACK 0x4001 +#define MCI_CDA_TRACK_AUDIO MCI_CD_OFFSET +#define MCI_CDA_TRACK_OTHER (MCI_CD_OFFSET+1) +#define MCI_WAVE_PCM MCI_WAVE_OFFSET +#define MCI_WAVE_MAPPER (MCI_WAVE_OFFSET+1) +#define MCI_WAVE_OPEN_BUFFER 0x10000 +#define MCI_WAVE_SET_FORMATTAG 0x10000 +#define MCI_WAVE_SET_CHANNELS 0x20000 +#define MCI_WAVE_SET_SAMPLESPERSEC 0x40000 +#define MCI_WAVE_SET_AVGBYTESPERSEC 0x80000 +#define MCI_WAVE_SET_BLOCKALIGN 0x100000 +#define MCI_WAVE_SET_BITSPERSAMPLE 0x200000 +#define MCI_WAVE_INPUT 0x400000 +#define MCI_WAVE_OUTPUT 0x800000 +#define MCI_WAVE_STATUS_FORMATTAG 0x4001 +#define MCI_WAVE_STATUS_CHANNELS 0x4002 +#define MCI_WAVE_STATUS_SAMPLESPERSEC 0x4003 +#define MCI_WAVE_STATUS_AVGBYTESPERSEC 0x4004 +#define MCI_WAVE_STATUS_BLOCKALIGN 0x4005 +#define MCI_WAVE_STATUS_BITSPERSAMPLE 0x4006 +#define MCI_WAVE_STATUS_LEVEL 0x4007 +#define MCI_WAVE_SET_ANYINPUT 0x4000000 +#define MCI_WAVE_SET_ANYOUTPUT 0x8000000 +#define MCI_WAVE_GETDEVCAPS_INPUTS 0x4001 +#define MCI_WAVE_GETDEVCAPS_OUTPUTS 0x4002 +#define MCI_SEQ_DIV_PPQN MCI_SEQ_OFFSET +#define MCI_SEQ_DIV_SMPTE_24 (MCI_SEQ_OFFSET+1) +#define MCI_SEQ_DIV_SMPTE_25 (MCI_SEQ_OFFSET+2) +#define MCI_SEQ_DIV_SMPTE_30DROP (MCI_SEQ_OFFSET+3) +#define MCI_SEQ_DIV_SMPTE_30 (MCI_SEQ_OFFSET+4) +#define MCI_SEQ_FORMAT_SONGPTR 0x4001 +#define MCI_SEQ_FILE 0x4002 +#define MCI_SEQ_MIDI 0x4003 +#define MCI_SEQ_SMPTE 0x4004 +#define MCI_SEQ_NONE 65533 +#define MCI_SEQ_MAPPER 65535 +#define MCI_SEQ_STATUS_TEMPO 0x4002 +#define MCI_SEQ_STATUS_PORT 0x4003 +#define MCI_SEQ_STATUS_SLAVE 0x4007 +#define MCI_SEQ_STATUS_MASTER 0x4008 +#define MCI_SEQ_STATUS_OFFSET 0x4009 +#define MCI_SEQ_STATUS_DIVTYPE 0x400A +#define MCI_SEQ_STATUS_NAME 0x400B +#define MCI_SEQ_STATUS_COPYRIGHT 0x400C +#define MCI_SEQ_SET_TEMPO 0x10000 +#define MCI_SEQ_SET_PORT 0x20000 +#define MCI_SEQ_SET_SLAVE 0x40000 +#define MCI_SEQ_SET_MASTER 0x80000 +#define MCI_SEQ_SET_OFFSET 0x1000000 +#define MCI_ANIM_OPEN_WS 0x10000 +#define MCI_ANIM_OPEN_PARENT 0x20000 +#define MCI_ANIM_OPEN_NOSTATIC 0x40000 +#define MCI_ANIM_PLAY_SPEED 0x10000 +#define MCI_ANIM_PLAY_REVERSE 0x20000 +#define MCI_ANIM_PLAY_FAST 0x40000 +#define MCI_ANIM_PLAY_SLOW 0x80000 +#define MCI_ANIM_PLAY_SCAN 0x100000 +#define MCI_ANIM_STEP_REVERSE 0x10000 +#define MCI_ANIM_STEP_FRAMES 0x20000 +#define MCI_ANIM_STATUS_SPEED 0x4001 +#define MCI_ANIM_STATUS_FORWARD 0x4002 +#define MCI_ANIM_STATUS_HWND 0x4003 +#define MCI_ANIM_STATUS_HPAL 0x4004 +#define MCI_ANIM_STATUS_STRETCH 0x4005 +#define MCI_ANIM_INFO_TEXT 0x10000 +#define MCI_ANIM_GETDEVCAPS_CAN_REVERSE 0x4001 +#define MCI_ANIM_GETDEVCAPS_FAST_RATE 0x4002 +#define MCI_ANIM_GETDEVCAPS_SLOW_RATE 0x4003 +#define MCI_ANIM_GETDEVCAPS_NORMAL_RATE 0x4004 +#define MCI_ANIM_GETDEVCAPS_PALETTES 0x4006 +#define MCI_ANIM_GETDEVCAPS_CAN_STRETCH 0x4007 +#define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS 0x4008 +#define MCI_ANIM_REALIZE_NORM 0x10000 +#define MCI_ANIM_REALIZE_BKGD 0x20000 +#define MCI_ANIM_WINDOW_HWND 0x10000 +#define MCI_ANIM_WINDOW_STATE 0x40000 +#define MCI_ANIM_WINDOW_TEXT 0x80000 +#define MCI_ANIM_WINDOW_ENABLE_STRETCH 0x100000 +#define MCI_ANIM_WINDOW_DISABLE_STRETCH 0x200000 +#define MCI_ANIM_WINDOW_DEFAULT 0xL +#define MCI_ANIM_RECT 0x10000 +#define MCI_ANIM_PUT_SOURCE 0x20000 +#define MCI_ANIM_PUT_DESTINATION 0x40000 +#define MCI_ANIM_WHERE_SOURCE 0x20000 +#define MCI_ANIM_WHERE_DESTINATION 0x40000 +#define MCI_ANIM_UPDATE_HDC 0x20000 +#define MCI_OVLY_OPEN_WS 0x10000 +#define MCI_OVLY_OPEN_PARENT 0x20000 +#define MCI_OVLY_STATUS_HWND 0x4001 +#define MCI_OVLY_STATUS_STRETCH 0x4002 +#define MCI_OVLY_INFO_TEXT 0x10000 +#define MCI_OVLY_GETDEVCAPS_CAN_STRETCH 0x4001 +#define MCI_OVLY_GETDEVCAPS_CAN_FREEZE 0x4002 +#define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS 0x4003 +#define MCI_OVLY_WINDOW_HWND 0x10000 +#define MCI_OVLY_WINDOW_STATE 0x40000 +#define MCI_OVLY_WINDOW_TEXT 0x80000 +#define MCI_OVLY_WINDOW_ENABLE_STRETCH 0x100000 +#define MCI_OVLY_WINDOW_DISABLE_STRETCH 0x200000 +#define MCI_OVLY_WINDOW_DEFAULT 0xL +#define MCI_OVLY_RECT 0x10000 +#define MCI_OVLY_PUT_SOURCE 0x20000 +#define MCI_OVLY_PUT_DESTINATION 0x40000 +#define MCI_OVLY_PUT_FRAME 0x80000 +#define MCI_OVLY_PUT_VIDEO 0x100000 +#define MCI_OVLY_WHERE_SOURCE 0x20000 +#define MCI_OVLY_WHERE_DESTINATION 0x40000 +#define MCI_OVLY_WHERE_FRAME 0x80000 +#define MCI_OVLY_WHERE_VIDEO 0x100000 +#define NEWTRANSPARENT 3 +#define QUERYROPSUPPORT 40 +#define SELECTDIB 41 +#define DIBINDEX(n) MAKELONG((n),0x10FF) +#define SC_SCREENSAVE 0xF140 +#define CAPS1 94 +#define C1_TRANSPARENT 1 +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif +#ifndef SEEK_CUR +#define SEEK_CUR 1 +#endif +#ifndef SEEK_END +#define SEEK_END 2 +#endif + +typedef DWORD MCIERROR; +typedef UINT MCIDEVICEID; +typedef UINT(CALLBACK *YIELDPROC)(MCIDEVICEID,DWORD); +typedef UINT MMVERSION; +typedef UINT MMRESULT; +typedef struct mmtime_tag { + UINT wType; + union { + DWORD ms; + DWORD sample; + DWORD cb; + DWORD ticks; + struct { + BYTE hour; + BYTE min; + BYTE sec; + BYTE frame; + BYTE fps; + BYTE dummy; + BYTE pad[2]; + } smpte; + struct { + DWORD songptrpos; + } midi; + } u; +} MMTIME,*PMMTIME,*LPMMTIME; +DECLARE_HANDLE(HDRVR); +typedef struct tagDRVCONFIGINFO { + DWORD dwDCISize; + LPCWSTR lpszDCISectionName; + LPCWSTR lpszDCIAliasName; +} DRVCONFIGINFO,*PDRVCONFIGINFO,*LPDRVCONFIGINFO; +typedef struct DRVCONFIGINFOEX { + DWORD dwDCISize; + LPCWSTR lpszDCISectionName; + LPCWSTR lpszDCIAliasName; + DWORD dnDevNode; +} DRVCONFIGINFOEX,*PDRVCONFIGINFOEX,*LPDRVCONFIGINFOEX; +typedef LRESULT(CALLBACK* DRIVERPROC)(DWORD,HDRVR,UINT,LPARAM,LPARAM); +typedef void (CALLBACK DRVCALLBACK)(HDRVR,UINT,DWORD,DWORD,DWORD); +typedef DRVCALLBACK *LPDRVCALLBACK; +typedef DRVCALLBACK *PDRVCALLBACK; +DECLARE_HANDLE(HWAVE); +DECLARE_HANDLE(HWAVEIN); +DECLARE_HANDLE(HWAVEOUT); +typedef HWAVEIN *LPHWAVEIN; +typedef HWAVEOUT *LPHWAVEOUT; +typedef DRVCALLBACK WAVECALLBACK; +typedef WAVECALLBACK *LPWAVECALLBACK; +typedef struct wavehdr_tag { + LPSTR lpData; + DWORD dwBufferLength; + DWORD dwBytesRecorded; + DWORD dwUser; + DWORD dwFlags; + DWORD dwLoops; + struct wavehdr_tag *lpNext; + DWORD reserved; +} WAVEHDR,*PWAVEHDR,*LPWAVEHDR; +typedef struct tagWAVEOUTCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; + DWORD dwSupport; +} WAVEOUTCAPSA,*PWAVEOUTCAPSA,*LPWAVEOUTCAPSA; +typedef struct tagWAVEOUTCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; + DWORD dwSupport; +} WAVEOUTCAPSW,*PWAVEOUTCAPSW,*LPWAVEOUTCAPSW; +typedef struct tagWAVEINCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; +} WAVEINCAPSA,*PWAVEINCAPSA,*LPWAVEINCAPSA; +typedef struct tagWAVEINCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; +} WAVEINCAPSW,*PWAVEINCAPSW,*LPWAVEINCAPSW; +typedef struct waveformat_tag { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; +} WAVEFORMAT,*PWAVEFORMAT,*LPWAVEFORMAT; +typedef struct pcmwaveformat_tag { + WAVEFORMAT wf; + WORD wBitsPerSample; +} PCMWAVEFORMAT, *PPCMWAVEFORMAT,*LPPCMWAVEFORMAT; +#ifndef _LPCWAVEFORMATEX_DEFINED +#define _LPCWAVEFORMATEX_DEFINED +#define _WAVEFORMATEX_ +typedef struct tWAVEFORMATEX { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; + WORD wBitsPerSample; + WORD cbSize; +} WAVEFORMATEX,*PWAVEFORMATEX,*LPWAVEFORMATEX; +typedef const WAVEFORMATEX *LPCWAVEFORMATEX; +#endif +DECLARE_HANDLE(HMIDI); +DECLARE_HANDLE(HMIDIIN); +DECLARE_HANDLE(HMIDIOUT); +DECLARE_HANDLE(HMIDISTRM); +typedef HMIDI *LPHMIDI; +typedef HMIDIIN *LPHMIDIIN; +typedef HMIDIOUT *LPHMIDIOUT; +typedef HMIDISTRM *LPHMIDISTRM; +typedef DRVCALLBACK MIDICALLBACK; +typedef MIDICALLBACK *LPMIDICALLBACK; +typedef WORD PATCHARRAY[MIDIPATCHSIZE]; +typedef WORD *LPPATCHARRAY; +typedef WORD KEYARRAY[MIDIPATCHSIZE]; +typedef WORD *LPKEYARRAY; +typedef struct tagMIDIOUTCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wVoices; + WORD wNotes; + WORD wChannelMask; + DWORD dwSupport; +} MIDIOUTCAPSA,*PMIDIOUTCAPSA,*LPMIDIOUTCAPSA; +typedef struct tagMIDIOUTCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wVoices; + WORD wNotes; + WORD wChannelMask; + DWORD dwSupport; +} MIDIOUTCAPSW,*PMIDIOUTCAPSW,*LPMIDIOUTCAPSW; +typedef struct tagMIDIINCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD dwSupport; +} MIDIINCAPSA,*PMIDIINCAPSA,*LPMIDIINCAPSA; +typedef struct tagMIDIINCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD dwSupport; +} MIDIINCAPSW,*PMIDIINCAPSW,*NPMIDIINCAPSW,*LPMIDIINCAPSW; +typedef struct midihdr_tag { + LPSTR lpData; + DWORD dwBufferLength; + DWORD dwBytesRecorded; + DWORD dwUser; + DWORD dwFlags; + struct midihdr_tag *lpNext; + DWORD reserved; + DWORD dwOffset; + DWORD dwReserved[8]; +} MIDIHDR,*PMIDIHDR,*LPMIDIHDR; +typedef struct midievent_tag { + DWORD dwDeltaTime; + DWORD dwStreamID; + DWORD dwEvent; + DWORD dwParms[1]; +} MIDIEVENT; +typedef struct midistrmbuffver_tag { + DWORD dwVersion; + DWORD dwMid; + DWORD dwOEMVersion; +} MIDISTRMBUFFVER; +typedef struct midiproptimediv_tag { + DWORD cbStruct; + DWORD dwTimeDiv; +} MIDIPROPTIMEDIV,*LPMIDIPROPTIMEDIV; +typedef struct midiproptempo_tag { + DWORD cbStruct; + DWORD dwTempo; +} MIDIPROPTEMPO,*LPMIDIPROPTEMPO; +typedef struct tagAUXCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wReserved1; + DWORD dwSupport; +} AUXCAPSA,*PAUXCAPSA,*LPAUXCAPSA; +typedef struct tagAUXCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wReserved1; + DWORD dwSupport; +} AUXCAPSW,*PAUXCAPSW,*LPAUXCAPSW; +DECLARE_HANDLE(HMIXEROBJ); +typedef HMIXEROBJ *LPHMIXEROBJ; +DECLARE_HANDLE(HMIXER); +typedef HMIXER *LPHMIXER; +typedef struct tagMIXERCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD fdwSupport; + DWORD cDestinations; +} MIXERCAPSA,*PMIXERCAPSA,*LPMIXERCAPSA; +typedef struct tagMIXERCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD fdwSupport; + DWORD cDestinations; +} MIXERCAPSW,*PMIXERCAPSW,*LPMIXERCAPSW; +typedef struct tagMIXERLINEA { + DWORD cbStruct; + DWORD dwDestination; + DWORD dwSource; + DWORD dwLineID; + DWORD fdwLine; + DWORD dwUser; + DWORD dwComponentType; + DWORD cChannels; + DWORD cConnections; + DWORD cControls; + CHAR szShortName[MIXER_SHORT_NAME_CHARS]; + CHAR szName[MIXER_LONG_NAME_CHARS]; + struct { + DWORD dwType; + DWORD dwDeviceID; + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + } Target; +} MIXERLINEA,*PMIXERLINEA,*LPMIXERLINEA; +typedef struct tagMIXERLINEW { + DWORD cbStruct; + DWORD dwDestination; + DWORD dwSource; + DWORD dwLineID; + DWORD fdwLine; + DWORD dwUser; + DWORD dwComponentType; + DWORD cChannels; + DWORD cConnections; + DWORD cControls; + WCHAR szShortName[MIXER_SHORT_NAME_CHARS]; + WCHAR szName[MIXER_LONG_NAME_CHARS]; + struct { + DWORD dwType; + DWORD dwDeviceID; + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + } Target; +} MIXERLINEW,*PMIXERLINEW,*LPMIXERLINEW; +typedef struct tagMIXERCONTROLA { + DWORD cbStruct; + DWORD dwControlID; + DWORD dwControlType; + DWORD fdwControl; + DWORD cMultipleItems; + CHAR szShortName[MIXER_SHORT_NAME_CHARS]; + CHAR szName[MIXER_LONG_NAME_CHARS]; + union { + _ANONYMOUS_STRUCT struct { + LONG lMinimum; + LONG lMaximum; + }_STRUCT_NAME(s); + _ANONYMOUS_STRUCT struct { + DWORD dwMinimum; + DWORD dwMaximum; + }_STRUCT_NAME(s1); + DWORD dwReserved[6]; + } Bounds; + union { + DWORD cSteps; + DWORD cbCustomData; + DWORD dwReserved[6]; + } Metrics; +} MIXERCONTROLA,*PMIXERCONTROLA,*LPMIXERCONTROLA; +typedef struct tagMIXERCONTROLW { + DWORD cbStruct; + DWORD dwControlID; + DWORD dwControlType; + DWORD fdwControl; + DWORD cMultipleItems; + WCHAR szShortName[MIXER_SHORT_NAME_CHARS]; + WCHAR szName[MIXER_LONG_NAME_CHARS]; + union { + _ANONYMOUS_STRUCT struct { + LONG lMinimum; + LONG lMaximum; + }_STRUCT_NAME(s); + _ANONYMOUS_STRUCT struct { + DWORD dwMinimum; + DWORD dwMaximum; + }_STRUCT_NAME(s1); + DWORD dwReserved[6]; + } Bounds; + union { + DWORD cSteps; + DWORD cbCustomData; + DWORD dwReserved[6]; + } Metrics; +} MIXERCONTROLW,*PMIXERCONTROLW,*LPMIXERCONTROLW; +typedef struct tagMIXERLINECONTROLSA { + DWORD cbStruct; + DWORD dwLineID; + _ANONYMOUS_UNION union { + DWORD dwControlID; + DWORD dwControlType; + } DUMMYUNIONNAME; + DWORD cControls; + DWORD cbmxctrl; + LPMIXERCONTROLA pamxctrl; +} MIXERLINECONTROLSA,*PMIXERLINECONTROLSA,*LPMIXERLINECONTROLSA; +typedef struct tagMIXERLINECONTROLSW { + DWORD cbStruct; + DWORD dwLineID; + _ANONYMOUS_UNION union { + DWORD dwControlID; + DWORD dwControlType; + } DUMMYUNIONNAME; + DWORD cControls; + DWORD cbmxctrl; + LPMIXERCONTROLW pamxctrl; +} MIXERLINECONTROLSW,*PMIXERLINECONTROLSW,*LPMIXERLINECONTROLSW; +typedef struct tMIXERCONTROLDETAILS { + DWORD cbStruct; + DWORD dwControlID; + DWORD cChannels; + _ANONYMOUS_UNION union { + HWND hwndOwner; + DWORD cMultipleItems; + } DUMMYUNIONNAME; + DWORD cbDetails; + PVOID paDetails; +} MIXERCONTROLDETAILS,*PMIXERCONTROLDETAILS,*LPMIXERCONTROLDETAILS; +typedef struct tagMIXERCONTROLDETAILS_LISTTEXTA { + DWORD dwParam1; + DWORD dwParam2; + CHAR szName[MIXER_LONG_NAME_CHARS]; +} MIXERCONTROLDETAILS_LISTTEXTA,*PMIXERCONTROLDETAILS_LISTTEXTA,*LPMIXERCONTROLDETAILS_LISTTEXTA; +typedef struct tagMIXERCONTROLDETAILS_LISTTEXTW { + DWORD dwParam1; + DWORD dwParam2; + WCHAR szName[MIXER_LONG_NAME_CHARS]; +} MIXERCONTROLDETAILS_LISTTEXTW,*PMIXERCONTROLDETAILS_LISTTEXTW,*LPMIXERCONTROLDETAILS_LISTTEXTW; +typedef struct tMIXERCONTROLDETAILS_BOOLEAN { + LONG fValue; +} MIXERCONTROLDETAILS_BOOLEAN,*PMIXERCONTROLDETAILS_BOOLEAN,*LPMIXERCONTROLDETAILS_BOOLEAN; +typedef struct tMIXERCONTROLDETAILS_SIGNED { + LONG lValue; +} MIXERCONTROLDETAILS_SIGNED,*PMIXERCONTROLDETAILS_SIGNED,*LPMIXERCONTROLDETAILS_SIGNED; +typedef struct tMIXERCONTROLDETAILS_UNSIGNED { + DWORD dwValue; +} MIXERCONTROLDETAILS_UNSIGNED,*PMIXERCONTROLDETAILS_UNSIGNED,*LPMIXERCONTROLDETAILS_UNSIGNED; +typedef void(CALLBACK TIMECALLBACK)(UINT,UINT,DWORD,DWORD,DWORD); +typedef TIMECALLBACK *LPTIMECALLBACK; +typedef struct timecaps_tag { + UINT wPeriodMin; + UINT wPeriodMax; +} TIMECAPS,*PTIMECAPS,*LPTIMECAPS; +typedef struct tagJOYCAPSA { + WORD wMid; + WORD wPid; + CHAR szPname[MAXPNAMELEN]; + UINT wXmin; + UINT wXmax; + UINT wYmin; + UINT wYmax; + UINT wZmin; + UINT wZmax; + UINT wNumButtons; + UINT wPeriodMin; + UINT wPeriodMax; + UINT wRmin; + UINT wRmax; + UINT wUmin; + UINT wUmax; + UINT wVmin; + UINT wVmax; + UINT wCaps; + UINT wMaxAxes; + UINT wNumAxes; + UINT wMaxButtons; + CHAR szRegKey[MAXPNAMELEN]; + CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; +} JOYCAPSA,*PJOYCAPSA,*LPJOYCAPSA; +typedef struct tagJOYCAPSW { + WORD wMid; + WORD wPid; + WCHAR szPname[MAXPNAMELEN]; + UINT wXmin; + UINT wXmax; + UINT wYmin; + UINT wYmax; + UINT wZmin; + UINT wZmax; + UINT wNumButtons; + UINT wPeriodMin; + UINT wPeriodMax; + UINT wRmin; + UINT wRmax; + UINT wUmin; + UINT wUmax; + UINT wVmin; + UINT wVmax; + UINT wCaps; + UINT wMaxAxes; + UINT wNumAxes; + UINT wMaxButtons; + WCHAR szRegKey[MAXPNAMELEN]; + WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; +} JOYCAPSW,*PJOYCAPSW,*LPJOYCAPSW; +typedef struct joyinfo_tag { + UINT wXpos; + UINT wYpos; + UINT wZpos; + UINT wButtons; +} JOYINFO,*PJOYINFO,*LPJOYINFO; +typedef struct joyinfoex_tag { + DWORD dwSize; + DWORD dwFlags; + DWORD dwXpos; + DWORD dwYpos; + DWORD dwZpos; + DWORD dwRpos; + DWORD dwUpos; + DWORD dwVpos; + DWORD dwButtons; + DWORD dwButtonNumber; + DWORD dwPOV; + DWORD dwReserved1; + DWORD dwReserved2; +} JOYINFOEX,*PJOYINFOEX,*LPJOYINFOEX; +typedef DWORD FOURCC; +typedef char *HPSTR; +DECLARE_HANDLE(HMMIO); +typedef LRESULT (CALLBACK MMIOPROC)(LPSTR,UINT,LPARAM,LPARAM); +typedef MMIOPROC *LPMMIOPROC; +typedef struct _MMIOINFO { + DWORD dwFlags; + FOURCC fccIOProc; + LPMMIOPROC pIOProc; + UINT wErrorRet; + HTASK htask; + LONG cchBuffer; + HPSTR pchBuffer; + HPSTR pchNext; + HPSTR pchEndRead; + HPSTR pchEndWrite; + LONG lBufOffset; + LONG lDiskOffset; + DWORD adwInfo[3]; + DWORD dwReserved1; + DWORD dwReserved2; + HMMIO hmmio; +} MMIOINFO,*PMMIOINFO,*LPMMIOINFO; +typedef const MMIOINFO *LPCMMIOINFO; +typedef struct _MMCKINFO { + FOURCC ckid; + DWORD cksize; + FOURCC fccType; + DWORD dwDataOffset; + DWORD dwFlags; +} MMCKINFO,*PMMCKINFO,*LPMMCKINFO; +typedef const MMCKINFO *LPCMMCKINFO; +typedef struct tagMCI_GENERIC_PARMS { + DWORD dwCallback; +} MCI_GENERIC_PARMS,*PMCI_GENERIC_PARMS,*LPMCI_GENERIC_PARMS; +typedef struct tagMCI_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; +} MCI_OPEN_PARMSA,*PMCI_OPEN_PARMSA,*LPMCI_OPEN_PARMSA; +typedef struct tagMCI_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; +} MCI_OPEN_PARMSW,*PMCI_OPEN_PARMSW,*LPMCI_OPEN_PARMSW; +typedef struct tagMCI_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} MCI_PLAY_PARMS,*PMCI_PLAY_PARMS,*LPMCI_PLAY_PARMS; +typedef struct tagMCI_SEEK_PARMS { + DWORD dwCallback; + DWORD dwTo; +} MCI_SEEK_PARMS, *PMCI_SEEK_PARMS,*LPMCI_SEEK_PARMS; +typedef struct tagMCI_STATUS_PARMS { + DWORD dwCallback; + DWORD dwReturn; + DWORD dwItem; + DWORD dwTrack; +} MCI_STATUS_PARMS,*PMCI_STATUS_PARMS,*LPMCI_STATUS_PARMS; +typedef struct tagMCI_INFO_PARMSA { + DWORD dwCallback; + LPSTR lpstrReturn; + DWORD dwRetSize; +} MCI_INFO_PARMSA,*LPMCI_INFO_PARMSA; +typedef struct tagMCI_INFO_PARMSW { + DWORD dwCallback; + LPWSTR lpstrReturn; + DWORD dwRetSize; +} MCI_INFO_PARMSW,*LPMCI_INFO_PARMSW; +typedef struct tagMCI_GETDEVCAPS_PARMS { + DWORD dwCallback; + DWORD dwReturn; + DWORD dwItem; +} MCI_GETDEVCAPS_PARMS,*PMCI_GETDEVCAPS_PARMS,*LPMCI_GETDEVCAPS_PARMS; +typedef struct tagMCI_SYSINFO_PARMSA { + DWORD dwCallback; + LPSTR lpstrReturn; + DWORD dwRetSize; + DWORD dwNumber; + UINT wDeviceType; +} MCI_SYSINFO_PARMSA,*PMCI_SYSINFO_PARMSA,*LPMCI_SYSINFO_PARMSA; +typedef struct tagMCI_SYSINFO_PARMSW { + DWORD dwCallback; + LPWSTR lpstrReturn; + DWORD dwRetSize; + DWORD dwNumber; + UINT wDeviceType; +} MCI_SYSINFO_PARMSW,*PMCI_SYSINFO_PARMSW,*LPMCI_SYSINFO_PARMSW; +typedef struct tagMCI_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; +} MCI_SET_PARMS,*PMCI_SET_PARMS,*LPMCI_SET_PARMS; +typedef struct tagMCI_BREAK_PARMS { + DWORD dwCallback; + int nVirtKey; + HWND hwndBreak; +} MCI_BREAK_PARMS,*PMCI_BREAK_PARMS,*LPMCI_BREAK_PARMS; +typedef struct tagMCI_SAVE_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; +} MCI_SAVE_PARMSA,*PMCI_SAVE_PARMSA,*LPMCI_SAVE_PARMSA; +typedef struct tagMCI_SAVE_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; +} MCI_SAVE_PARMSW,*PMCI_SAVE_PARMSW,*LPMCI_SAVE_PARMSW; +typedef struct tagMCI_LOAD_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; +} MCI_LOAD_PARMSA,*PMCI_LOAD_PARMSA,*LPMCI_LOAD_PARMSA; +typedef struct tagMCI_LOAD_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; +} MCI_LOAD_PARMSW,*PMCI_LOAD_PARMSW,*LPMCI_LOAD_PARMSW; +typedef struct tagMCI_RECORD_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} MCI_RECORD_PARMS,*LPMCI_RECORD_PARMS; +typedef struct tagMCI_VD_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; + DWORD dwSpeed; +} MCI_VD_PLAY_PARMS,*PMCI_VD_PLAY_PARMS,*LPMCI_VD_PLAY_PARMS; +typedef struct tagMCI_VD_STEP_PARMS { + DWORD dwCallback; + DWORD dwFrames; +} MCI_VD_STEP_PARMS,*PMCI_VD_STEP_PARMS,*LPMCI_VD_STEP_PARMS; +typedef struct tagMCI_VD_ESCAPE_PARMSA { + DWORD dwCallback; + LPCSTR lpstrCommand; +} MCI_VD_ESCAPE_PARMSA,*PMCI_VD_ESCAPE_PARMSA,*LPMCI_VD_ESCAPE_PARMSA; +typedef struct tagMCI_VD_ESCAPE_PARMSW { + DWORD dwCallback; + LPCWSTR lpstrCommand; +} MCI_VD_ESCAPE_PARMSW,*PMCI_VD_ESCAPE_PARMSW,*LPMCI_VD_ESCAPE_PARMSW; +typedef struct tagMCI_WAVE_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwBufferSeconds; +} MCI_WAVE_OPEN_PARMSA,*PMCI_WAVE_OPEN_PARMSA,*LPMCI_WAVE_OPEN_PARMSA; +typedef struct tagMCI_WAVE_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwBufferSeconds; +} MCI_WAVE_OPEN_PARMSW,*PMCI_WAVE_OPEN_PARMSW,*LPMCI_WAVE_OPEN_PARMSW; +typedef struct tagMCI_WAVE_DELETE_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} MCI_WAVE_DELETE_PARMS, *PMCI_WAVE_DELETE_PARMS,*LPMCI_WAVE_DELETE_PARMS; +typedef struct tagMCI_WAVE_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; + UINT wInput; + UINT wOutput; + WORD wFormatTag; + WORD wReserved2; + WORD nChannels; + WORD wReserved3; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; + WORD wReserved4; + WORD wBitsPerSample; + WORD wReserved5; +} MCI_WAVE_SET_PARMS,*PMCI_WAVE_SET_PARMS,*LPMCI_WAVE_SET_PARMS; + +LRESULT WINAPI CloseDriver(HDRVR,LONG,LONG); +HDRVR WINAPI OpenDriver(LPCWSTR,LPCWSTR,LONG); +LRESULT WINAPI SendDriverMessage(HDRVR,UINT,LONG,LONG); +HMODULE WINAPI DrvGetModuleHandle(HDRVR); +HMODULE WINAPI GetDriverModuleHandle(HDRVR); +LRESULT WINAPI DefDriverProc(DWORD,HDRVR,UINT,LPARAM,LPARAM); +UINT WINAPI mmsystemGetVersion(void); +#define OutputDebugStr OutputDebugString +BOOL WINAPI sndPlaySoundA(LPCSTR,UINT); +BOOL WINAPI sndPlaySoundW(LPCWSTR,UINT); +BOOL WINAPI PlaySoundA(LPCSTR,HMODULE,DWORD); +BOOL WINAPI PlaySoundW(LPCWSTR,HMODULE,DWORD); +UINT WINAPI waveOutGetNumDevs(void); +MMRESULT WINAPI waveOutGetDevCapsA(UINT,LPWAVEOUTCAPSA,UINT); +MMRESULT WINAPI waveOutGetDevCapsW(UINT,LPWAVEOUTCAPSW,UINT); +MMRESULT WINAPI waveOutGetVolume(HWAVEOUT,PDWORD); +MMRESULT WINAPI waveOutSetVolume(HWAVEOUT,DWORD); +MMRESULT WINAPI waveOutGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT WINAPI waveOutGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT WINAPI waveOutOpen(LPHWAVEOUT,UINT,LPCWAVEFORMATEX,DWORD,DWORD,DWORD); +MMRESULT WINAPI waveOutClose(HWAVEOUT); +MMRESULT WINAPI waveOutPrepareHeader(HWAVEOUT,LPWAVEHDR,UINT); +MMRESULT WINAPI waveOutUnprepareHeader(HWAVEOUT,LPWAVEHDR,UINT); +MMRESULT WINAPI waveOutWrite(HWAVEOUT,LPWAVEHDR,UINT); +MMRESULT WINAPI waveOutPause(HWAVEOUT); +MMRESULT WINAPI waveOutRestart(HWAVEOUT); +MMRESULT WINAPI waveOutReset(HWAVEOUT); +MMRESULT WINAPI waveOutBreakLoop(HWAVEOUT); +MMRESULT WINAPI waveOutGetPosition(HWAVEOUT,LPMMTIME,UINT); +MMRESULT WINAPI waveOutGetPitch(HWAVEOUT,PDWORD); +MMRESULT WINAPI waveOutSetPitch(HWAVEOUT,DWORD); +MMRESULT WINAPI waveOutGetPlaybackRate(HWAVEOUT,PDWORD); +MMRESULT WINAPI waveOutSetPlaybackRate(HWAVEOUT,DWORD); +MMRESULT WINAPI waveOutGetID(HWAVEOUT,LPUINT); +MMRESULT WINAPI waveOutMessage(HWAVEOUT,UINT,DWORD,DWORD); +UINT WINAPI waveInGetNumDevs(void); +MMRESULT WINAPI waveInGetDevCapsA(UINT,LPWAVEINCAPSA,UINT); +MMRESULT WINAPI waveInGetDevCapsW(UINT,LPWAVEINCAPSW,UINT); +MMRESULT WINAPI waveInGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT WINAPI waveInGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT WINAPI waveInOpen(LPHWAVEIN,UINT,LPCWAVEFORMATEX,DWORD*,DWORD*,DWORD); +//MMRESULT WINAPI waveInOpen(LPHWAVEIN,UINT,LPCWAVEFORMATEX,DWORD,DWORD,DWORD); +MMRESULT WINAPI waveInClose(HWAVEIN); +MMRESULT WINAPI waveInPrepareHeader(HWAVEIN,LPWAVEHDR,UINT); +MMRESULT WINAPI waveInUnprepareHeader(HWAVEIN,LPWAVEHDR,UINT); +MMRESULT WINAPI waveInAddBuffer(HWAVEIN,LPWAVEHDR,UINT); +MMRESULT WINAPI waveInStart(HWAVEIN); +MMRESULT WINAPI waveInStop(HWAVEIN); +MMRESULT WINAPI waveInReset(HWAVEIN); +MMRESULT WINAPI waveInGetPosition(HWAVEIN,LPMMTIME,UINT); +MMRESULT WINAPI waveInGetID(HWAVEIN,LPUINT); +MMRESULT WINAPI waveInMessage(HWAVEIN,UINT,DWORD,DWORD); +UINT WINAPI midiOutGetNumDevs(void); +MMRESULT WINAPI midiStreamOpen(LPHMIDISTRM,LPUINT,DWORD,DWORD,DWORD,DWORD); +MMRESULT WINAPI midiStreamClose(HMIDISTRM); +MMRESULT WINAPI midiStreamProperty(HMIDISTRM,LPBYTE,DWORD); +MMRESULT WINAPI midiStreamPosition(HMIDISTRM,LPMMTIME,UINT); +MMRESULT WINAPI midiStreamOut(HMIDISTRM,LPMIDIHDR,UINT); +MMRESULT WINAPI midiStreamPause(HMIDISTRM); +MMRESULT WINAPI midiStreamRestart(HMIDISTRM); +MMRESULT WINAPI midiStreamStop(HMIDISTRM); +MMRESULT WINAPI midiConnect(HMIDI,HMIDIOUT,PVOID); +MMRESULT WINAPI midiDisconnect(HMIDI,HMIDIOUT,PVOID); +MMRESULT WINAPI midiOutGetDevCapsA(UINT,LPMIDIOUTCAPSA,UINT); +MMRESULT WINAPI midiOutGetDevCapsW(UINT,LPMIDIOUTCAPSW,UINT); +MMRESULT WINAPI midiOutGetVolume(HMIDIOUT,PDWORD); +MMRESULT WINAPI midiOutSetVolume(HMIDIOUT,DWORD); +MMRESULT WINAPI midiOutGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT WINAPI midiOutGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT WINAPI midiOutOpen(LPHMIDIOUT,UINT,DWORD,DWORD,DWORD); +MMRESULT WINAPI midiOutClose(HMIDIOUT); +MMRESULT WINAPI midiOutPrepareHeader(HMIDIOUT,LPMIDIHDR,UINT); +MMRESULT WINAPI midiOutUnprepareHeader(HMIDIOUT,LPMIDIHDR,UINT); +MMRESULT WINAPI midiOutShortMsg(HMIDIOUT,DWORD); +MMRESULT WINAPI midiOutLongMsg(HMIDIOUT,LPMIDIHDR,UINT); +MMRESULT WINAPI midiOutReset(HMIDIOUT); +MMRESULT WINAPI midiOutCachePatches(HMIDIOUT,UINT,LPWORD,UINT); +MMRESULT WINAPI midiOutCacheDrumPatches(HMIDIOUT,UINT,LPWORD,UINT); +MMRESULT WINAPI midiOutGetID(HMIDIOUT,LPUINT); +MMRESULT WINAPI midiOutMessage(HMIDIOUT,UINT,DWORD,DWORD); +UINT WINAPI midiInGetNumDevs(void); +MMRESULT WINAPI midiInGetDevCapsA(UINT,LPMIDIINCAPSA,UINT); +MMRESULT WINAPI midiInGetDevCapsW(UINT,LPMIDIINCAPSW,UINT); +MMRESULT WINAPI midiInGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT WINAPI midiInGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT WINAPI midiInOpen(LPHMIDIIN,UINT,DWORD,DWORD,DWORD); +MMRESULT WINAPI midiInClose(HMIDIIN); +MMRESULT WINAPI midiInPrepareHeader(HMIDIIN,LPMIDIHDR,UINT); +MMRESULT WINAPI midiInUnprepareHeader(HMIDIIN,LPMIDIHDR,UINT); +MMRESULT WINAPI midiInAddBuffer(HMIDIIN,LPMIDIHDR,UINT); +MMRESULT WINAPI midiInStart(HMIDIIN); +MMRESULT WINAPI midiInStop(HMIDIIN); +MMRESULT WINAPI midiInReset(HMIDIIN); +MMRESULT WINAPI midiInGetID(HMIDIIN,LPUINT); +MMRESULT WINAPI midiInMessage(HMIDIIN,UINT,DWORD,DWORD); +UINT WINAPI auxGetNumDevs(void); +MMRESULT WINAPI auxGetDevCapsA(UINT,LPAUXCAPSA,UINT); +MMRESULT WINAPI auxGetDevCapsW(UINT,LPAUXCAPSW,UINT); +MMRESULT WINAPI auxSetVolume(UINT,DWORD); +MMRESULT WINAPI auxGetVolume(UINT,PDWORD); +MMRESULT WINAPI auxOutMessage(UINT,UINT,DWORD,DWORD); +UINT WINAPI mixerGetNumDevs(void); +MMRESULT WINAPI mixerGetDevCapsA(UINT,LPMIXERCAPSA,UINT); +MMRESULT WINAPI mixerGetDevCapsW(UINT,LPMIXERCAPSW,UINT); +MMRESULT WINAPI mixerOpen(LPHMIXER,UINT,DWORD,DWORD,DWORD); +MMRESULT WINAPI mixerClose(HMIXER); +DWORD WINAPI mixerMessage(HMIXER,UINT,DWORD,DWORD); +MMRESULT WINAPI mixerGetLineInfoA(HMIXEROBJ,LPMIXERLINEA,DWORD); +MMRESULT WINAPI mixerGetLineInfoW(HMIXEROBJ,LPMIXERLINEW,DWORD); +MMRESULT WINAPI mixerGetID(HMIXEROBJ,PUINT,DWORD); +MMRESULT WINAPI mixerGetLineControlsA(HMIXEROBJ,LPMIXERLINECONTROLSA,DWORD); +MMRESULT WINAPI mixerGetLineControlsW(HMIXEROBJ,LPMIXERLINECONTROLSW,DWORD); +MMRESULT WINAPI mixerGetControlDetailsA(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); +MMRESULT WINAPI mixerGetControlDetailsW(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); +MMRESULT WINAPI mixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); +MMRESULT WINAPI timeGetSystemTime(LPMMTIME,UINT); +DWORD WINAPI timeGetTime(void); +MMRESULT WINAPI timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD,UINT); +MMRESULT WINAPI timeKillEvent(UINT); +MMRESULT WINAPI timeGetDevCaps(LPTIMECAPS,UINT); +MMRESULT WINAPI timeBeginPeriod(UINT); +MMRESULT WINAPI timeEndPeriod(UINT); +UINT WINAPI joyGetNumDevs(void); +MMRESULT WINAPI joyGetDevCapsA(UINT,LPJOYCAPSA,UINT); +MMRESULT WINAPI joyGetDevCapsW(UINT,LPJOYCAPSW,UINT); +MMRESULT WINAPI joyGetPos(UINT,LPJOYINFO); +MMRESULT WINAPI joyGetPosEx(UINT,LPJOYINFOEX); +MMRESULT WINAPI joyGetThreshold(UINT,LPUINT); +MMRESULT WINAPI joyReleaseCapture(UINT); +MMRESULT WINAPI joySetCapture(HWND,UINT,UINT,BOOL); +MMRESULT WINAPI joySetThreshold(UINT,UINT); +FOURCC WINAPI mmioStringToFOURCCA(LPCSTR,UINT); +FOURCC WINAPI mmioStringToFOURCCW(LPCWSTR,UINT); +LPMMIOPROC WINAPI mmioInstallIOProcA(FOURCC,LPMMIOPROC,DWORD); +LPMMIOPROC WINAPI mmioInstallIOProcW(FOURCC,LPMMIOPROC,DWORD); +HMMIO WINAPI mmioOpenA(LPSTR,LPMMIOINFO,DWORD); +HMMIO WINAPI mmioOpenW(LPWSTR,LPMMIOINFO,DWORD); +MMRESULT WINAPI mmioRenameA(LPCSTR,LPCSTR,LPCMMIOINFO,DWORD); +MMRESULT WINAPI mmioRenameW(LPCWSTR,LPCWSTR,LPCMMIOINFO,DWORD); +MMRESULT WINAPI mmioClose(HMMIO,UINT); +LONG WINAPI mmioRead(HMMIO,HPSTR,LONG); +LONG WINAPI mmioWrite(HMMIO,LPCSTR,LONG); +LONG WINAPI mmioSeek(HMMIO,LONG,int); +MMRESULT WINAPI mmioGetInfo(HMMIO,LPMMIOINFO,UINT); +MMRESULT WINAPI mmioSetInfo(HMMIO,LPCMMIOINFO,UINT); +MMRESULT WINAPI mmioSetBuffer(HMMIO,LPSTR,LONG,UINT); +MMRESULT WINAPI mmioFlush(HMMIO,UINT); +MMRESULT WINAPI mmioAdvance(HMMIO,LPMMIOINFO,UINT); +LRESULT WINAPI mmioSendMessage(HMMIO,UINT,LPARAM,LPARAM); +MMRESULT WINAPI mmioDescend(HMMIO,LPMMCKINFO,const MMCKINFO*,UINT); +MMRESULT WINAPI mmioAscend(HMMIO,LPMMCKINFO,UINT); +MMRESULT WINAPI mmioCreateChunk(HMMIO,LPMMCKINFO,UINT); +MCIERROR WINAPI mciSendCommandA(MCIDEVICEID,UINT,DWORD,DWORD); +MCIERROR WINAPI mciSendCommandW(MCIDEVICEID,UINT,DWORD,DWORD); +MCIERROR WINAPI mciSendStringA(LPCSTR,LPSTR,UINT,HWND); +MCIERROR WINAPI mciSendStringW(LPCWSTR,LPWSTR,UINT,HWND); +MCIDEVICEID WINAPI mciGetDeviceIDA(LPCSTR); +MCIDEVICEID WINAPI mciGetDeviceIDW(LPCWSTR); +MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA(DWORD,LPCSTR); +MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW(DWORD,LPCWSTR); +BOOL WINAPI mciGetErrorStringA(MCIERROR,LPSTR,UINT); +BOOL WINAPI mciGetErrorStringW(MCIERROR,LPWSTR,UINT); +BOOL WINAPI mciSetYieldProc(MCIDEVICEID,YIELDPROC,DWORD); +HTASK WINAPI mciGetCreatorTask(MCIDEVICEID); +YIELDPROC WINAPI mciGetYieldProc(MCIDEVICEID,PDWORD); + +typedef struct tagMCI_SEQ_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; + DWORD dwTempo; + DWORD dwPort; + DWORD dwSlave; + DWORD dwMaster; + DWORD dwOffset; +} MCI_SEQ_SET_PARMS,*PMCI_SEQ_SET_PARMS,*LPMCI_SEQ_SET_PARMS; +typedef struct tagMCI_ANIM_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_ANIM_OPEN_PARMSA,*PMCI_ANIM_OPEN_PARMSA,*LPMCI_ANIM_OPEN_PARMSA; +typedef struct tagMCI_ANIM_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_ANIM_OPEN_PARMSW,*PMCI_ANIM_OPEN_PARMSW,*LPMCI_ANIM_OPEN_PARMSW; +typedef struct tagMCI_ANIM_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; + DWORD dwSpeed; +} MCI_ANIM_PLAY_PARMS,*PMCI_ANIM_PLAY_PARMS,*LPMCI_ANIM_PLAY_PARMS; +typedef struct tagMCI_ANIM_STEP_PARMS { + DWORD dwCallback; + DWORD dwFrames; +} MCI_ANIM_STEP_PARMS,*PMCI_ANIM_STEP_PARMS,*LPMCI_ANIM_STEP_PARMS; +typedef struct tagMCI_ANIM_WINDOW_PARMSA { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCSTR lpstrText; +} MCI_ANIM_WINDOW_PARMSA,*PMCI_ANIM_WINDOW_PARMSA,*LPMCI_ANIM_WINDOW_PARMSA; +typedef struct tagMCI_ANIM_WINDOW_PARMSW { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCWSTR lpstrText; +} MCI_ANIM_WINDOW_PARMSW,*PMCI_ANIM_WINDOW_PARMSW,*LPMCI_ANIM_WINDOW_PARMSW; +typedef struct tagMCI_ANIM_RECT_PARMS { + DWORD dwCallback; +#ifdef MCI_USE_OFFEXT + POINT ptOffset; + POINT ptExtent; +#else + RECT rc; +#endif +} MCI_ANIM_RECT_PARMS,*PMCI_ANIM_RECT_PARMS,*LPMCI_ANIM_RECT_PARMS; +typedef struct tagMCI_ANIM_UPDATE_PARMS { + DWORD dwCallback; + RECT rc; + HDC hDC; +} MCI_ANIM_UPDATE_PARMS,*PMCI_ANIM_UPDATE_PARMS,*LPMCI_ANIM_UPDATE_PARMS; +typedef struct tagMCI_OVLY_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_OVLY_OPEN_PARMSA,*PMCI_OVLY_OPEN_PARMSA,*LPMCI_OVLY_OPEN_PARMSA; +typedef struct tagMCI_OVLY_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_OVLY_OPEN_PARMSW,*PMCI_OVLY_OPEN_PARMSW,*LPMCI_OVLY_OPEN_PARMSW; +typedef struct tagMCI_OVLY_WINDOW_PARMSA { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCSTR lpstrText; +} MCI_OVLY_WINDOW_PARMSA,*PMCI_OVLY_WINDOW_PARMSA,*LPMCI_OVLY_WINDOW_PARMSA; +typedef struct tagMCI_OVLY_WINDOW_PARMSW { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCWSTR lpstrText; +} MCI_OVLY_WINDOW_PARMSW,*PMCI_OVLY_WINDOW_PARMSW,*LPMCI_OVLY_WINDOW_PARMSW; +typedef struct tagMCI_OVLY_RECT_PARMS { + DWORD dwCallback; +#ifdef MCI_USE_OFFEXT + POINT ptOffset; + POINT ptExtent; +#else + RECT rc; +#endif +} MCI_OVLY_RECT_PARMS,*PMCI_OVLY_RECT_PARMS,*LPMCI_OVLY_RECT_PARMS; +typedef struct tagMCI_OVLY_SAVE_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; + RECT rc; +} MCI_OVLY_SAVE_PARMSA,*PMCI_OVLY_SAVE_PARMSA,*LPMCI_OVLY_SAVE_PARMSA; +typedef struct tagMCI_OVLY_SAVE_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; + RECT rc; +} MCI_OVLY_SAVE_PARMSW,*PMCI_OVLY_SAVE_PARMSW,*LPMCI_OVLY_SAVE_PARMSW; +typedef struct tagMCI_OVLY_LOAD_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; + RECT rc; +} MCI_OVLY_LOAD_PARMSA,*PMCI_OVLY_LOAD_PARMSA,*LPMCI_OVLY_LOAD_PARMSA; +typedef struct tagMCI_OVLY_LOAD_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; + RECT rc; +} MCI_OVLY_LOAD_PARMSW,*PMCI_OVLY_LOAD_PARMSW,*LPMCI_OVLY_LOAD_PARMSW; + +#ifdef UNICODE +typedef WAVEOUTCAPSW WAVEOUTCAPS,*PWAVEOUTCAPS,*LPWAVEOUTCAPS; +typedef WAVEINCAPSW WAVEINCAPS,*PWAVEINCAPS,*LPWAVEINCAPS; +typedef MIDIOUTCAPSW MIDIOUTCAPS,*PMIDIOUTCAPS,*LPMIDIOUTCAPS; +typedef MIDIINCAPSW MIDIINCAPS,*PMIDIINCAPS,*LPMIDIINCAPS; +typedef AUXCAPSW AUXCAPS,*PAUXCAPS,*LPAUXCAPS; +typedef MIXERCAPSW MIXERCAPS,*PMIXERCAPS,*LPMIXERCAPS; +typedef MIXERLINEW MIXERLINE,*PMIXERLINE,*LPMIXERLINE; +typedef MIXERCONTROLW MIXERCONTROL,*PMIXERCONTROL,*LPMIXERCONTROL; +typedef MIXERLINECONTROLSW MIXERLINECONTROLS,*PMIXERLINECONTROLS,*LPMIXERLINECONTROLS; +typedef MIXERCONTROLDETAILS_LISTTEXTW MIXERCONTROLDETAILS_LISTTEXT,*PMIXERCONTROLDETAILS_LISTTEXT,*LPMIXERCONTROLDETAILS_LISTTEXT; +typedef JOYCAPSW JOYCAPS,*PJOYCAPS,*LPJOYCAPS; +typedef MCI_OPEN_PARMSW MCI_OPEN_PARMS,*PMCI_OPEN_PARMS,*LPMCI_OPEN_PARMS; +typedef MCI_INFO_PARMSW MCI_INFO_PARMS,*LPMCI_INFO_PARMS; +typedef MCI_SYSINFO_PARMSW MCI_SYSINFO_PARMS,*PMCI_SYSINFO_PARMS,*LPMCI_SYSINFO_PARMS; +typedef MCI_SAVE_PARMSW MCI_SAVE_PARMS,*PMCI_SAVE_PARMS,*LPMCI_SAVE_PARMS; +typedef MCI_LOAD_PARMSW MCI_LOAD_PARMS,*PMCI_LOAD_PARMS,*LPMCI_LOAD_PARMS; +typedef MCI_VD_ESCAPE_PARMSW MCI_VD_ESCAPE_PARMS,*PMCI_VD_ESCAPE_PARMS,*LPMCI_VD_ESCAPE_PARMS; +typedef MCI_WAVE_OPEN_PARMSW MCI_WAVE_OPEN_PARMS,*PMCI_WAVE_OPEN_PARMS,*LPMCI_WAVE_OPEN_PARMS; +typedef MCI_ANIM_OPEN_PARMSW MCI_ANIM_OPEN_PARMS,*PMCI_ANIM_OPEN_PARMS,*LPMCI_ANIM_OPEN_PARMS; +typedef MCI_ANIM_WINDOW_PARMSW MCI_ANIM_WINDOW_PARMS,*PMCI_ANIM_WINDOW_PARMS,*LPMCI_ANIM_WINDOW_PARMS; +typedef MCI_OVLY_OPEN_PARMSW MCI_OVLY_OPEN_PARMS,*PMCI_OVLY_OPEN_PARMS,*LPMCI_OVLY_OPEN_PARMS; +typedef MCI_OVLY_WINDOW_PARMSW MCI_OVLY_WINDOW_PARMS,*PMCI_OVLY_WINDOW_PARMS,*LPMCI_OVLY_WINDOW_PARMS; +typedef MCI_OVLY_SAVE_PARMSW MCI_OVLY_SAVE_PARMS,*PMCI_OVLY_SAVE_PARMS,*LPMCI_OVLY_SAVE_PARMS; +#define sndPlaySound sndPlaySoundW +#define PlaySound PlaySoundW +#define waveOutGetDevCaps waveOutGetDevCapsW +#define waveOutGetErrorText waveOutGetErrorTextW +#define waveInGetDevCaps waveInGetDevCapsW +#define waveInGetErrorText waveInGetErrorTextW +#define midiOutGetDevCaps midiOutGetDevCapsW +#define midiOutGetErrorText midiOutGetErrorTextW +#define midiInGetDevCaps midiInGetDevCapsW +#define midiInGetErrorText midiInGetErrorTextW +#define auxGetDevCaps auxGetDevCapsW +#define mixerGetDevCaps mixerGetDevCapsW +#define mixerGetLineInfo mixerGetLineInfoW +#define mixerGetLineControls mixerGetLineControlsW +#define mixerGetControlDetails mixerGetControlDetailsW +#define joyGetDevCaps joyGetDevCapsW +#define mmioInstallIOProc mmioInstallIOProcW +#define mmioStringToFOURCC mmioStringToFOURCCW +#define mmioOpen mmioOpenW +#define mmioRename mmioRenameW +#define mciSendCommand mciSendCommandW +#define mciSendString mciSendStringW +#define mciGetDeviceID mciGetDeviceIDW +#define mciGetDeviceIDFromElementID mciGetDeviceIDFromElementIDW +#define mciGetErrorString mciGetErrorStringW +#else +typedef WAVEOUTCAPSA WAVEOUTCAPS,*PWAVEOUTCAPS,*LPWAVEOUTCAPS; +typedef WAVEINCAPSA WAVEINCAPS,*PWAVEINCAPS,*LPWAVEINCAPS; +typedef MIDIOUTCAPSA MIDIOUTCAPS,*PMIDIOUTCAPS,*LPMIDIOUTCAPS; +typedef MIDIINCAPSA MIDIINCAPS,*PMIDIINCAPS,*LPMIDIINCAPS; +typedef AUXCAPSA AUXCAPS,*PAUXCAPS,*LPAUXCAPS; +typedef MIXERCAPSA MIXERCAPS,*PMIXERCAPS,*LPMIXERCAPS; +typedef MIXERLINEA MIXERLINE,*PMIXERLINE,*LPMIXERLINE; +typedef MIXERCONTROLA MIXERCONTROL,*PMIXERCONTROL,*LPMIXERCONTROL; +typedef MIXERLINECONTROLSA MIXERLINECONTROLS,*PMIXERLINECONTROLS,*LPMIXERLINECONTROLS; +typedef MIXERCONTROLDETAILS_LISTTEXTA MIXERCONTROLDETAILS_LISTTEXT,*PMIXERCONTROLDETAILS_LISTTEXT,*LPMIXERCONTROLDETAILS_LISTTEXT; +typedef JOYCAPSA JOYCAPS,*PJOYCAPS,*LPJOYCAPS; +typedef MCI_OPEN_PARMSA MCI_OPEN_PARMS,*PMCI_OPEN_PARMS,*LPMCI_OPEN_PARMS; +typedef MCI_INFO_PARMSA MCI_INFO_PARMS,*LPMCI_INFO_PARMS; +typedef MCI_SYSINFO_PARMSA MCI_SYSINFO_PARMS,*PMCI_SYSINFO_PARMS,*LPMCI_SYSINFO_PARMS; +typedef MCI_SAVE_PARMSA MCI_SAVE_PARMS,*PMCI_SAVE_PARMS,*LPMCI_SAVE_PARMS; +typedef MCI_LOAD_PARMSA MCI_LOAD_PARMS,*PMCI_LOAD_PARMS,*LPMCI_LOAD_PARMS; +typedef MCI_VD_ESCAPE_PARMSA MCI_VD_ESCAPE_PARMS,*PMCI_VD_ESCAPE_PARMS,*LPMCI_VD_ESCAPE_PARMS; +typedef MCI_WAVE_OPEN_PARMSA MCI_WAVE_OPEN_PARMS,*PMCI_WAVE_OPEN_PARMS,*LPMCI_WAVE_OPEN_PARMS; +typedef MCI_ANIM_OPEN_PARMSA MCI_ANIM_OPEN_PARMS,*PMCI_ANIM_OPEN_PARMS,*LPMCI_ANIM_OPEN_PARMS; +typedef MCI_ANIM_WINDOW_PARMSA MCI_ANIM_WINDOW_PARMS,*PMCI_ANIM_WINDOW_PARMS,*LPMCI_ANIM_WINDOW_PARMS; +typedef MCI_OVLY_OPEN_PARMSA MCI_OVLY_OPEN_PARMS,*PMCI_OVLY_OPEN_PARMS,*LPMCI_OVLY_OPEN_PARMS; +typedef MCI_OVLY_WINDOW_PARMSA MCI_OVLY_WINDOW_PARMS,*PMCI_OVLY_WINDOW_PARMS,*LPMCI_OVLY_WINDOW_PARMS; +typedef MCI_OVLY_SAVE_PARMSA MCI_OVLY_SAVE_PARMS,*PMCI_OVLY_SAVE_PARMS,*LPMCI_OVLY_SAVE_PARMS; +#define sndPlaySound sndPlaySoundA +#define PlaySound PlaySoundA +#define waveOutGetDevCaps waveOutGetDevCapsA +#define waveOutGetErrorText waveOutGetErrorTextA +#define waveInGetDevCaps waveInGetDevCapsA +#define waveInGetErrorText waveInGetErrorTextA +#define midiOutGetDevCaps midiOutGetDevCapsA +#define midiOutGetErrorText midiOutGetErrorTextA +#define midiInGetDevCaps midiInGetDevCapsA +#define midiInGetErrorText midiInGetErrorTextA +#define auxGetDevCaps auxGetDevCapsA +#define mixerGetDevCaps mixerGetDevCapsA +#define mixerGetLineInfo mixerGetLineInfoA +#define mixerGetLineControls mixerGetLineControlsA +#define mixerGetControlDetails mixerGetControlDetailsA +#define joyGetDevCaps joyGetDevCapsA +#define mmioInstallIOProc mmioInstallIOProcA +#define mmioStringToFOURCC mmioStringToFOURCCA +#define mmioOpen mmioOpenA +#define mmioRename mmioRenameA +#define mciSendCommand mciSendCommandA +#define mciSendString mciSendStringA +#define mciGetDeviceID mciGetDeviceIDA +#define mciGetDeviceIDFromElementID mciGetDeviceIDFromElementIDA +#define mciGetErrorString mciGetErrorStringA +#endif +#ifdef __cplusplus +} +#endif +#pragma pack(pop) +#endif diff --git a/colorchord2/windows/symbol_enumerator.c b/colorchord2/windows/symbol_enumerator.c new file mode 100644 index 0000000..fcb3727 --- /dev/null +++ b/colorchord2/windows/symbol_enumerator.c @@ -0,0 +1,245 @@ +#include +#include "symbol_enumerator.h" + +#if defined( WIN32 ) || defined( WINDOWS ) || defined( USE_WINDOWS ) || defined( _WIN32 ) + +#include + +typedef struct _SYMBOL_INFO { + ULONG SizeOfStruct; + ULONG TypeIndex; + ULONG64 Reserved[2]; + ULONG Index; + ULONG Size; + ULONG64 ModBase; + ULONG Flags; + ULONG64 Value; + ULONG64 Address; + ULONG Register; + ULONG Scope; + ULONG Tag; + ULONG NameLen; + ULONG MaxNameLen; + TCHAR Name[1]; +} SYMBOL_INFO, *PSYMBOL_INFO; +typedef struct _IMAGEHLP_STACK_FRAME { + ULONG64 InstructionOffset; + ULONG64 ReturnOffset; + ULONG64 FrameOffset; + ULONG64 StackOffset; + ULONG64 BackingStoreOffset; + ULONG64 FuncTableEntry; + ULONG64 Params[4]; + ULONG64 Reserved[5]; + BOOL Virtual; + ULONG Reserved2; +} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME; + + +typedef BOOL (*PSYM_ENUMERATESYMBOLS_CALLBACK)( + PSYMBOL_INFO pSymInfo, + ULONG SymbolSize, + PVOID UserContext + ); + +BOOL WINAPI SymEnumSymbols( + HANDLE hProcess, + ULONG64 BaseOfDll, + PCTSTR Mask, + PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + const PVOID UserContext +); + +BOOL WINAPI SymInitialize( + HANDLE hProcess, + PCTSTR UserSearchPath, + BOOL fInvadeProcess +); + +BOOL WINAPI SymCleanup( + HANDLE hProcess +); + +BOOL CALLBACK __cdecl mycb( + PSYMBOL_INFO pSymInfo, + ULONG SymbolSize, + PVOID UserContext + ){ + SymEnumeratorCallback cb = (SymEnumeratorCallback)UserContext; + return !cb( "", &pSymInfo->Name[0], (void*)pSymInfo->Address, (long) pSymInfo->Size ); + } + +int EnumerateSymbols( SymEnumeratorCallback cb ) +{ + HANDLE proc = GetCurrentProcess(); + if( !SymInitialize( proc, 0, 1 ) ) return -1; + if( !SymEnumSymbols( proc, 0, "*!*", &mycb, (void*)cb ) ) + { + SymCleanup(proc); + return -2; + } + SymCleanup(proc); + return 0; +} + +#else + + +#include +#include +#include +#include +#include + +#ifndef __GNUC__ +#define __int128_t long long long +#endif + +#include +#include + +#define UINTS_PER_WORD (__WORDSIZE / (CHAR_BIT * sizeof (unsigned int))) + + + struct dl_phdr_info { + ElfW(Addr) dlpi_addr; /* Base address of object */ + const char *dlpi_name; /* (Null-terminated) name of + object */ + const ElfW(Phdr) *dlpi_phdr; /* Pointer to array of + ELF program headers + for this object */ + ElfW(Half) dlpi_phnum; /* # of items in dlpi_phdr */ + }; + + + +void dl_iterate_phdr( void*, void*); + + +static ElfW(Word) gnu_hashtab_symbol_count(const unsigned int *const table) +{ + const unsigned int *const bucket = table + 4 + table[2] * (unsigned int)(UINTS_PER_WORD); + unsigned int b = table[0]; + unsigned int max = 0U; + + while (b-->0U) + if (bucket[b] > max) + max = bucket[b]; + + return (ElfW(Word))max; +} + +static static void *dynamic_pointer(const ElfW(Addr) addr, + const ElfW(Addr) base, const ElfW(Phdr) *const header, const ElfW(Half) headers) +{ + if (addr) { + ElfW(Half) h; + + for (h = 0; h < headers; h++) + if (header[h].p_type == PT_LOAD) + if (addr >= base + header[h].p_vaddr && + addr < base + header[h].p_vaddr + header[h].p_memsz) + return (void *)addr; + } + + return NULL; +} + +//Mostly based off of http://stackoverflow.com/questions/29903049/get-names-and-addresses-of-exported-functions-from-in-linux +static int callback(struct dl_phdr_info *info, + size_t size, void *data) +{ + SymEnumeratorCallback cb = (SymEnumeratorCallback)data; + const ElfW(Addr) base = info->dlpi_addr; + const ElfW(Phdr) *const header = info->dlpi_phdr; + const ElfW(Half) headers = info->dlpi_phnum; + const char *libpath, *libname; + ElfW(Half) h; + + if (info->dlpi_name && info->dlpi_name[0]) + libpath = info->dlpi_name; + else + libpath = ""; + + libname = strrchr(libpath, '/'); + + if (libname && libname[0] == '/' && libname[1]) + libname++; + else + libname = libpath; + + for (h = 0; h < headers; h++) + { + if (header[h].p_type == PT_DYNAMIC) + { + const ElfW(Dyn) *entry = (const ElfW(Dyn) *)(base + header[h].p_vaddr); + const ElfW(Word) *hashtab; + const ElfW(Sym) *symtab = NULL; + const char *strtab = NULL; + ElfW(Word) symbol_count = 0; + + for (; entry->d_tag != DT_NULL; entry++) + { + switch (entry->d_tag) + { + case DT_HASH: + hashtab = dynamic_pointer(entry->d_un.d_ptr, base, header, headers); + if (hashtab) + symbol_count = hashtab[1]; + break; + case DT_GNU_HASH: + hashtab = dynamic_pointer(entry->d_un.d_ptr, base, header, headers); + if (hashtab) + { + ElfW(Word) count = gnu_hashtab_symbol_count(hashtab); + if (count > symbol_count) + symbol_count = count; + } + break; + case DT_STRTAB: + strtab = dynamic_pointer(entry->d_un.d_ptr, base, header, headers); + break; + case DT_SYMTAB: + symtab = dynamic_pointer(entry->d_un.d_ptr, base, header, headers); + break; + } + } + + if (symtab && strtab && symbol_count > 0) { + ElfW(Word) s; + + for (s = 0; s < symbol_count; s++) { + const char *name; + void *const ptr = dynamic_pointer(base + symtab[s].st_value, base, header, headers); + int result; + + if (!ptr) + continue; + + if (symtab[s].st_name) + name = strtab + symtab[s].st_name; + else + name = ""; + + result = cb( libpath, name, ptr, symtab[s].st_size ); + if( result ) return result; //Bail early. + } + } + } + } + return 0; +} + + + + + +int EnumerateSymbols( SymEnumeratorCallback cb ) +{ + dl_iterate_phdr( callback, cb ); +} + + + + +#endif diff --git a/colorchord2/windows/symbol_enumerator.h b/colorchord2/windows/symbol_enumerator.h new file mode 100644 index 0000000..87e033b --- /dev/null +++ b/colorchord2/windows/symbol_enumerator.h @@ -0,0 +1,12 @@ +#ifndef _SYMBOL_ENUMERATOR_H +#define _SYMBOL_ENUMERATOR_H + +//Enumerates all symbols in the currently loaded excutable. +//Don't forget to compile with -rdynamic! + +//Return 0 to continue search. 1 to stop. +typedef int (*SymEnumeratorCallback)( const char * path, const char * name, void * location, long size ); + +int EnumerateSymbols( SymEnumeratorCallback cb ); + +#endif diff --git a/colorchord2/windows/tcc_stubs.c b/colorchord2/windows/tcc_stubs.c new file mode 100644 index 0000000..c6dfc76 --- /dev/null +++ b/colorchord2/windows/tcc_stubs.c @@ -0,0 +1,80 @@ + +#include <_mingw.h> + +#define REMATH(x) double __cdecl x( double f ); float x##f(float v) { return x(v); } + +int SymnumCheck( const char * path, const char * name, void * location, long size ) +{ + if( strncmp( name, "REGISTER", 8 ) == 0 ) + { + typedef void (*sf)(); + sf fn = (sf)location; + fn(); + } + return 0; +} + + + +void ManuallyRegisterDevices() +{ + EnumerateSymbols( SymnumCheck ); +} + +REMATH( acos ); +REMATH( cos ); +REMATH( sin ); +REMATH( sqrt ); +REMATH( asin ); +REMATH( exp ); +REMATH( fmod ); +REMATH( pow ); + +double __cdecl strtod (const char* str, char** endptr); +float strtof( const char* str, char** endptr) +{ + return strtod( str, endptr ); +} + +double __cdecl atan2(double a, double b); +float atan2f(float a, float b) +{ + return atan2( a, b ); +} + +//From http://stackoverflow.com/questions/40159892/using-asprintf-on-windows +int __cdecl vsprintf_s( + char *buffer, + size_t numberOfElements, + const char *format, + va_list argptr +); + +int asprintf(char **strp, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + int r = vasprintf(strp, fmt, ap); + va_end(ap); + return r; +} + +int vasprintf(char **strp, const char *fmt, va_list ap) { + // _vscprintf tells you how big the buffer needs to be + int len = _vscprintf(fmt, ap); + if (len == -1) { + return -1; + } + size_t size = (size_t)len + 1; + char *str = (char*)malloc(size); + if (!str) { + return -1; + } + // _vsprintf_s is the "secure" version of vsprintf + int r = vsprintf_s(str, len + 1, fmt, ap); + if (r == -1) { + free(str); + return -1; + } + *strp = str; + return r; +} \ No newline at end of file diff --git a/colorchord2/windows/winsock2.h b/colorchord2/windows/winsock2.h new file mode 100644 index 0000000..d318eb6 --- /dev/null +++ b/colorchord2/windows/winsock2.h @@ -0,0 +1,1303 @@ +/* + + Definitions for winsock 2 + + Contributed by the WINE project. + + Portions Copyright (c) 1980, 1983, 1988, 1993 + The Regents of the University of California. All rights reserved. + + Portions Copyright (c) 1993 by Digital Equipment Corporation. + */ + +#if !(defined _WINSOCK2_H || defined _WINSOCK_H) +#define _WINSOCK2_H +#define _WINSOCK_H /* to prevent later inclusion of winsock.h */ +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#define _GNU_H_WINDOWS32_SOCKETS + +#include + +#ifndef WINSOCK_API_LINKAGE +#ifdef __W32API_USE_DLLIMPORT__ +#define WINSOCK_API_LINKAGE DECLSPEC_IMPORT +#else +#define WINSOCK_API_LINKAGE +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif +/* Names common to Winsock1.1 and Winsock2 */ +#if !defined ( _BSDTYPES_DEFINED ) +/* also defined in gmon.h and in cygwin's sys/types */ +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; +#define _BSDTYPES_DEFINED +#endif /* ! def _BSDTYPES_DEFINED */ +typedef u_int SOCKET; +#ifndef FD_SETSIZE +#define FD_SETSIZE 64 +#endif + +/* shutdown() how types */ +#define SD_RECEIVE 0x00 +#define SD_SEND 0x01 +#define SD_BOTH 0x02 + +#ifndef _SYS_TYPES_FD_SET +/* fd_set may be defined by the newlib + * if __USE_W32_SOCKETS not defined. + */ +#ifdef fd_set +#undef fd_set +#endif +typedef struct fd_set { + u_int fd_count; + SOCKET fd_array[FD_SETSIZE]; +} fd_set; +int PASCAL __WSAFDIsSet(SOCKET,fd_set*); +#ifndef FD_CLR +#define FD_CLR(fd,set) do { u_int __i;\ +for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\ + if (((fd_set *)(set))->fd_array[__i] == (fd)) {\ + while (__i < ((fd_set *)(set))->fd_count-1) {\ + ((fd_set*)(set))->fd_array[__i] = ((fd_set*)(set))->fd_array[__i+1];\ + __i++;\ + }\ + ((fd_set*)(set))->fd_count--;\ + break;\ + }\ +}\ +} while (0) +#endif +#ifndef FD_SET +/* this differs from the define in winsock.h and in cygwin sys/types.h */ +#define FD_SET(fd, set) do { u_int __i;\ +for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\ + if (((fd_set *)(set))->fd_array[__i] == (fd)) {\ + break;\ + }\ +}\ +if (__i == ((fd_set *)(set))->fd_count) {\ + if (((fd_set *)(set))->fd_count < FD_SETSIZE) {\ + ((fd_set *)(set))->fd_array[__i] = (fd);\ + ((fd_set *)(set))->fd_count++;\ + }\ +}\ +} while(0) +#endif +#ifndef FD_ZERO +#define FD_ZERO(set) (((fd_set *)(set))->fd_count=0) +#endif +#ifndef FD_ISSET +#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set *)(set)) +#endif +#elif !defined (USE_SYS_TYPES_FD_SET) +#warning "fd_set and associated macros have been defined in sys/types. \ + This may cause runtime problems with W32 sockets" +#endif /* ndef _SYS_TYPES_FD_SET */ +#if !(defined (__INSIDE_CYGWIN__) || (__INSIDE_MSYS__)) +#ifndef _TIMEVAL_DEFINED /* also in sys/time.h */ +#define _TIMEVAL_DEFINED +struct timeval { + long tv_sec; + long tv_usec; +}; +#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) +#define timercmp(tvp, uvp, cmp) \ + (((tvp)->tv_sec != (uvp)->tv_sec) ? \ + ((tvp)->tv_sec cmp (uvp)->tv_sec) : \ + ((tvp)->tv_usec cmp (uvp)->tv_usec)) +#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 +#endif /* _TIMEVAL_DEFINED */ +struct hostent { + char *h_name; + char **h_aliases; + short h_addrtype; + short h_length; + char **h_addr_list; +#define h_addr h_addr_list[0] +}; +struct linger { + u_short l_onoff; + u_short l_linger; +}; +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ +#define IOCPARM_MASK 0x7f +#define IOC_VOID 0x20000000 +#define IOC_OUT 0x40000000 +#define IOC_IN 0x80000000 +#define IOC_INOUT (IOC_IN|IOC_OUT) + +#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) +#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) +#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) +#define FIONBIO _IOW('f', 126, u_long) +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ + +#define FIONREAD _IOR('f', 127, u_long) +#define FIOASYNC _IOW('f', 125, u_long) +#define SIOCSHIWAT _IOW('s', 0, u_long) +#define SIOCGHIWAT _IOR('s', 1, u_long) +#define SIOCSLOWAT _IOW('s', 2, u_long) +#define SIOCGLOWAT _IOR('s', 3, u_long) +#define SIOCATMARK _IOR('s', 7, u_long) + +#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +struct netent { + char * n_name; + char **n_aliases; + short n_addrtype; + u_long n_net; +}; +struct servent { + char *s_name; + char **s_aliases; + short s_port; + char *s_proto; +}; +struct protoent { + char *p_name; + char **p_aliases; + short p_proto; +}; +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ + +#define IPPROTO_IP 0 +#define IPPROTO_ICMP 1 +#define IPPROTO_IGMP 2 +#define IPPROTO_GGP 3 +#define IPPROTO_TCP 6 +#define IPPROTO_PUP 12 +#define IPPROTO_UDP 17 +#define IPPROTO_IDP 22 +#define IPPROTO_ND 77 +#define IPPROTO_RAW 255 +#define IPPROTO_MAX 256 +/* IPv6 options */ +#define IPPROTO_HOPOPTS 0 /* IPv6 Hop-by-Hop options */ +#define IPPROTO_IPV6 41 /* IPv6 header */ +#define IPPROTO_ROUTING 43 /* IPv6 Routing header */ +#define IPPROTO_FRAGMENT 44 /* IPv6 fragmentation header */ +#define IPPROTO_ESP 50 /* encapsulating security payload */ +#define IPPROTO_AH 51 /* authentication header */ +#define IPPROTO_ICMPV6 58 /* ICMPv6 */ +#define IPPROTO_NONE 59 /* IPv6 no next header */ +#define IPPROTO_DSTOPTS 60 /* IPv6 Destination options */ +#define IPPORT_ECHO 7 +#define IPPORT_DISCARD 9 +#define IPPORT_SYSTAT 11 +#define IPPORT_DAYTIME 13 +#define IPPORT_NETSTAT 15 +#define IPPORT_FTP 21 +#define IPPORT_TELNET 23 +#define IPPORT_SMTP 25 +#define IPPORT_TIMESERVER 37 +#define IPPORT_NAMESERVER 42 +#define IPPORT_WHOIS 43 +#define IPPORT_MTP 57 +#define IPPORT_TFTP 69 +#define IPPORT_RJE 77 +#define IPPORT_FINGER 79 +#define IPPORT_TTYLINK 87 +#define IPPORT_SUPDUP 95 +#define IPPORT_EXECSERVER 512 +#define IPPORT_LOGINSERVER 513 +#define IPPORT_CMDSERVER 514 +#define IPPORT_EFSSERVER 520 +#define IPPORT_BIFFUDP 512 +#define IPPORT_WHOSERVER 513 +#define IPPORT_ROUTESERVER 520 +#define IPPORT_RESERVED 1024 +#define IMPLINK_IP 155 +#define IMPLINK_LOWEXPER 156 +#define IMPLINK_HIGHEXPER 158 +struct in_addr { + union { + struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; + struct { u_short s_w1,s_w2; } S_un_w; + u_long S_addr; + } S_un; +#define s_addr S_un.S_addr +#define s_host S_un.S_un_b.s_b2 +#define s_net S_un.S_un_b.s_b1 +#define s_imp S_un.S_un_w.s_w2 +#define s_impno S_un.S_un_b.s_b4 +#define s_lh S_un.S_un_b.s_b3 +}; +#define IN_CLASSA(i) (((long)(i)&0x80000000) == 0) +#define IN_CLASSA_NET 0xff000000 +#define IN_CLASSA_NSHIFT 24 +#define IN_CLASSA_HOST 0x00ffffff +#define IN_CLASSA_MAX 128 +#define IN_CLASSB(i) (((long)(i)&0xc0000000)==0x80000000) +#define IN_CLASSB_NET 0xffff0000 +#define IN_CLASSB_NSHIFT 16 +#define IN_CLASSB_HOST 0x0000ffff +#define IN_CLASSB_MAX 65536 +#define IN_CLASSC(i) (((long)(i)&0xe0000000)==0xc0000000) +#define IN_CLASSC_NET 0xffffff00 +#define IN_CLASSC_NSHIFT 8 +#define IN_CLASSC_HOST 0xff +#define INADDR_ANY (u_long)0 +#define INADDR_LOOPBACK 0x7f000001 +#define INADDR_BROADCAST (u_long)0xffffffff +#define INADDR_NONE 0xffffffff +struct sockaddr_in { + short sin_family; + u_short sin_port; + struct in_addr sin_addr; + char sin_zero[8]; +}; +#define WSADESCRIPTION_LEN 256 +#define WSASYS_STATUS_LEN 128 +typedef struct WSAData { + WORD wVersion; + WORD wHighVersion; + char szDescription[WSADESCRIPTION_LEN+1]; + char szSystemStatus[WSASYS_STATUS_LEN+1]; + unsigned short iMaxSockets; + unsigned short iMaxUdpDg; + char * lpVendorInfo; +} WSADATA; +typedef WSADATA *LPWSADATA; + +#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +#define IP_OPTIONS 1 +#define SO_DEBUG 1 +#define SO_ACCEPTCONN 2 +#define SO_REUSEADDR 4 +#define SO_KEEPALIVE 8 +#define SO_DONTROUTE 16 +#define SO_BROADCAST 32 +#define SO_USELOOPBACK 64 +#define SO_LINGER 128 +#define SO_OOBINLINE 256 +#define SO_DONTLINGER (u_int)(~SO_LINGER) +#define SO_EXCLUSIVEADDRUSE ((u_int)(~SO_REUSEADDR)) +#define SO_SNDBUF 0x1001 +#define SO_RCVBUF 0x1002 +#define SO_SNDLOWAT 0x1003 +#define SO_RCVLOWAT 0x1004 +#define SO_SNDTIMEO 0x1005 +#define SO_RCVTIMEO 0x1006 +#define SO_ERROR 0x1007 +#define SO_TYPE 0x1008 +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ + +#define INVALID_SOCKET (SOCKET)(~0) +#define SOCKET_ERROR (-1) +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 +#define SOCK_RDM 4 +#define SOCK_SEQPACKET 5 +#define TCP_NODELAY 0x0001 +#define AF_UNSPEC 0 +#define AF_UNIX 1 +#define AF_INET 2 +#define AF_IMPLINK 3 +#define AF_PUP 4 +#define AF_CHAOS 5 +#define AF_IPX 6 +#define AF_NS 6 +#define AF_ISO 7 +#define AF_OSI AF_ISO +#define AF_ECMA 8 +#define AF_DATAKIT 9 +#define AF_CCITT 10 +#define AF_SNA 11 +#define AF_DECnet 12 +#define AF_DLI 13 +#define AF_LAT 14 +#define AF_HYLINK 15 +#define AF_APPLETALK 16 +#define AF_NETBIOS 17 +#define AF_VOICEVIEW 18 +#define AF_FIREFOX 19 +#define AF_UNKNOWN1 20 +#define AF_BAN 21 +#define AF_ATM 22 +#define AF_INET6 23 +#define AF_CLUSTER 24 +#define AF_12844 25 +#define AF_IRDA 26 +#define AF_NETDES 28 +#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +#define AF_MAX 29 +struct sockaddr { + u_short sa_family; + char sa_data[14]; +}; + +/* Portable IPv6/IPv4 version of sockaddr. Based on RFC 2553. + Pad to force 8 byte alignment and maximum size of 128 bytes. */ + +/* + * Desired design of maximum size and alignment + */ +#define _SS_MAXSIZE 128 +#define _SS_ALIGNSIZE (sizeof (__int64)) +/* + * Definitions used for sockaddr_storage structure paddings design. + */ +#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (short)) +#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (short) \ + + _SS_PAD1SIZE \ + + _SS_ALIGNSIZE)) +struct sockaddr_storage { + short ss_family; + char __ss_pad1[_SS_PAD1SIZE]; /* pad to 8 */ + __int64 __ss_align; /* force alignment */ + char __ss_pad2[_SS_PAD2SIZE]; /* pad to 128 */ +}; +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ + +struct sockproto { + u_short sp_family; + u_short sp_protocol; +}; +#define PF_UNSPEC AF_UNSPEC +#define PF_UNIX AF_UNIX +#define PF_INET AF_INET +#define PF_IMPLINK AF_IMPLINK +#define PF_PUP AF_PUP +#define PF_CHAOS AF_CHAOS +#define PF_NS AF_NS +#define PF_IPX AF_IPX +#define PF_ISO AF_ISO +#define PF_OSI AF_OSI +#define PF_ECMA AF_ECMA +#define PF_DATAKIT AF_DATAKIT +#define PF_CCITT AF_CCITT +#define PF_SNA AF_SNA +#define PF_DECnet AF_DECnet +#define PF_DLI AF_DLI +#define PF_LAT AF_LAT +#define PF_HYLINK AF_HYLINK +#define PF_APPLETALK AF_APPLETALK +#define PF_VOICEVIEW AF_VOICEVIEW +#define PF_FIREFOX AF_FIREFOX +#define PF_UNKNOWN1 AF_UNKNOWN1 +#define PF_BAN AF_BAN +#define PF_ATM AF_ATM +#define PF_INET6 AF_INET6 +#define PF_MAX AF_MAX +#define SOL_SOCKET 0xffff +#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +#define SOMAXCONN 0x7fffffff /* (5) in WinSock1.1 */ +#define MSG_OOB 1 +#define MSG_PEEK 2 +#define MSG_DONTROUTE 4 +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ +#define MSG_MAXIOVLEN 16 +#define MSG_PARTIAL 0x8000 +#define MAXGETHOSTSTRUCT 1024 + +#define FD_READ_BIT 0 +#define FD_READ (1 << FD_READ_BIT) +#define FD_WRITE_BIT 1 +#define FD_WRITE (1 << FD_WRITE_BIT) +#define FD_OOB_BIT 2 +#define FD_OOB (1 << FD_OOB_BIT) +#define FD_ACCEPT_BIT 3 +#define FD_ACCEPT (1 << FD_ACCEPT_BIT) +#define FD_CONNECT_BIT 4 +#define FD_CONNECT (1 << FD_CONNECT_BIT) +#define FD_CLOSE_BIT 5 +#define FD_CLOSE (1 << FD_CLOSE_BIT) +/* winsock1.1 defines stop at FD_CLOSE (32) */ +#define FD_QOS_BIT 6 +#define FD_QOS (1 << FD_QOS_BIT) +#define FD_GROUP_QOS_BIT 7 +#define FD_GROUP_QOS (1 << FD_GROUP_QOS_BIT) +#define FD_ROUTING_INTERFACE_CHANGE_BIT 8 +#define FD_ROUTING_INTERFACE_CHANGE (1 << FD_ROUTING_INTERFACE_CHANGE_BIT) +#define FD_ADDRESS_LIST_CHANGE_BIT 9 +#define FD_ADDRESS_LIST_CHANGE (1 << FD_ADDRESS_LIST_CHANGE_BIT) +#define FD_MAX_EVENTS 10 +#define FD_ALL_EVENTS ((1 << FD_MAX_EVENTS) - 1) + +#ifndef WSABASEERR +#define WSABASEERR 10000 +#define WSAEINTR (WSABASEERR+4) +#define WSAEBADF (WSABASEERR+9) +#define WSAEACCES (WSABASEERR+13) +#define WSAEFAULT (WSABASEERR+14) +#define WSAEINVAL (WSABASEERR+22) +#define WSAEMFILE (WSABASEERR+24) +#define WSAEWOULDBLOCK (WSABASEERR+35) +#define WSAEINPROGRESS (WSABASEERR+36) /* deprecated on WinSock2 */ +#define WSAEALREADY (WSABASEERR+37) +#define WSAENOTSOCK (WSABASEERR+38) +#define WSAEDESTADDRREQ (WSABASEERR+39) +#define WSAEMSGSIZE (WSABASEERR+40) +#define WSAEPROTOTYPE (WSABASEERR+41) +#define WSAENOPROTOOPT (WSABASEERR+42) +#define WSAEPROTONOSUPPORT (WSABASEERR+43) +#define WSAESOCKTNOSUPPORT (WSABASEERR+44) +#define WSAEOPNOTSUPP (WSABASEERR+45) +#define WSAEPFNOSUPPORT (WSABASEERR+46) +#define WSAEAFNOSUPPORT (WSABASEERR+47) +#define WSAEADDRINUSE (WSABASEERR+48) +#define WSAEADDRNOTAVAIL (WSABASEERR+49) +#define WSAENETDOWN (WSABASEERR+50) +#define WSAENETUNREACH (WSABASEERR+51) +#define WSAENETRESET (WSABASEERR+52) +#define WSAECONNABORTED (WSABASEERR+53) +#define WSAECONNRESET (WSABASEERR+54) +#define WSAENOBUFS (WSABASEERR+55) +#define WSAEISCONN (WSABASEERR+56) +#define WSAENOTCONN (WSABASEERR+57) +#define WSAESHUTDOWN (WSABASEERR+58) +#define WSAETOOMANYREFS (WSABASEERR+59) +#define WSAETIMEDOUT (WSABASEERR+60) +#define WSAECONNREFUSED (WSABASEERR+61) +#define WSAELOOP (WSABASEERR+62) +#define WSAENAMETOOLONG (WSABASEERR+63) +#define WSAEHOSTDOWN (WSABASEERR+64) +#define WSAEHOSTUNREACH (WSABASEERR+65) +#define WSAENOTEMPTY (WSABASEERR+66) +#define WSAEPROCLIM (WSABASEERR+67) +#define WSAEUSERS (WSABASEERR+68) +#define WSAEDQUOT (WSABASEERR+69) +#define WSAESTALE (WSABASEERR+70) +#define WSAEREMOTE (WSABASEERR+71) +#define WSAEDISCON (WSABASEERR+101) +#define WSASYSNOTREADY (WSABASEERR+91) +#define WSAVERNOTSUPPORTED (WSABASEERR+92) +#define WSANOTINITIALISED (WSABASEERR+93) +#define WSAHOST_NOT_FOUND (WSABASEERR+1001) +#define WSATRY_AGAIN (WSABASEERR+1002) +#define WSANO_RECOVERY (WSABASEERR+1003) +#define WSANO_DATA (WSABASEERR+1004) + +/* WinSock2 specific error codes */ +#define WSAENOMORE (WSABASEERR+102) +#define WSAECANCELLED (WSABASEERR+103) +#define WSAEINVALIDPROCTABLE (WSABASEERR+104) +#define WSAEINVALIDPROVIDER (WSABASEERR+105) +#define WSAEPROVIDERFAILEDINIT (WSABASEERR+106) +#define WSASYSCALLFAILURE (WSABASEERR+107) +#define WSASERVICE_NOT_FOUND (WSABASEERR+108) +#define WSATYPE_NOT_FOUND (WSABASEERR+109) +#define WSA_E_NO_MORE (WSABASEERR+110) +#define WSA_E_CANCELLED (WSABASEERR+111) +#define WSAEREFUSED (WSABASEERR+112) + +/* WS QualityofService errors */ +#define WSA_QOS_RECEIVERS (WSABASEERR + 1005) +#define WSA_QOS_SENDERS (WSABASEERR + 1006) +#define WSA_QOS_NO_SENDERS (WSABASEERR + 1007) +#define WSA_QOS_NO_RECEIVERS (WSABASEERR + 1008) +#define WSA_QOS_REQUEST_CONFIRMED (WSABASEERR + 1009) +#define WSA_QOS_ADMISSION_FAILURE (WSABASEERR + 1010) +#define WSA_QOS_POLICY_FAILURE (WSABASEERR + 1011) +#define WSA_QOS_BAD_STYLE (WSABASEERR + 1012) +#define WSA_QOS_BAD_OBJECT (WSABASEERR + 1013) +#define WSA_QOS_TRAFFIC_CTRL_ERROR (WSABASEERR + 1014) +#define WSA_QOS_GENERIC_ERROR (WSABASEERR + 1015) +#define WSA_QOS_ESERVICETYPE (WSABASEERR + 1016) +#define WSA_QOS_EFLOWSPEC (WSABASEERR + 1017) +#define WSA_QOS_EPROVSPECBUF (WSABASEERR + 1018) +#define WSA_QOS_EFILTERSTYLE (WSABASEERR + 1019) +#define WSA_QOS_EFILTERTYPE (WSABASEERR + 1020) +#define WSA_QOS_EFILTERCOUNT (WSABASEERR + 1021) +#define WSA_QOS_EOBJLENGTH (WSABASEERR + 1022) +#define WSA_QOS_EFLOWCOUNT (WSABASEERR + 1023) +#define WSA_QOS_EUNKOWNPSOBJ (WSABASEERR + 1024) +#define WSA_QOS_EPOLICYOBJ (WSABASEERR + 1025) +#define WSA_QOS_EFLOWDESC (WSABASEERR + 1026) +#define WSA_QOS_EPSFLOWSPEC (WSABASEERR + 1027) +#define WSA_QOS_EPSFILTERSPEC (WSABASEERR + 1028) +#define WSA_QOS_ESDMODEOBJ (WSABASEERR + 1029) +#define WSA_QOS_ESHAPERATEOBJ (WSABASEERR + 1030) +#define WSA_QOS_RESERVED_PETYPE (WSABASEERR + 1031) + +#endif /* !WSABASEERR */ + +#define WSANO_ADDRESS WSANO_DATA +#if !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +#define h_errno WSAGetLastError() +#define HOST_NOT_FOUND WSAHOST_NOT_FOUND +#define TRY_AGAIN WSATRY_AGAIN +#define NO_RECOVERY WSANO_RECOVERY +#define NO_DATA WSANO_DATA +#define NO_ADDRESS WSANO_ADDRESS +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ +WINSOCK_API_LINKAGE SOCKET PASCAL accept(SOCKET,struct sockaddr*,int*); +WINSOCK_API_LINKAGE int PASCAL bind(SOCKET,const struct sockaddr*,int); +WINSOCK_API_LINKAGE int PASCAL closesocket(SOCKET); +WINSOCK_API_LINKAGE int PASCAL connect(SOCKET,const struct sockaddr*,int); +WINSOCK_API_LINKAGE int PASCAL ioctlsocket(SOCKET,long,u_long *); +WINSOCK_API_LINKAGE int PASCAL getpeername(SOCKET,struct sockaddr*,int*); +WINSOCK_API_LINKAGE int PASCAL getsockname(SOCKET,struct sockaddr*,int*); +WINSOCK_API_LINKAGE int PASCAL getsockopt(SOCKET,int,int,char*,int*); +WINSOCK_API_LINKAGE unsigned long PASCAL inet_addr(const char*); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(char *) inet_ntoa(struct in_addr); +WINSOCK_API_LINKAGE int PASCAL listen(SOCKET,int); +WINSOCK_API_LINKAGE int PASCAL recv(SOCKET,char*,int,int); +WINSOCK_API_LINKAGE int PASCAL recvfrom(SOCKET,char*,int,int,struct sockaddr*,int*); +WINSOCK_API_LINKAGE int PASCAL send(SOCKET,const char*,int,int); +WINSOCK_API_LINKAGE int PASCAL sendto(SOCKET,const char*,int,int,const struct sockaddr*,int); +WINSOCK_API_LINKAGE int PASCAL setsockopt(SOCKET,int,int,const char*,int); +WINSOCK_API_LINKAGE int PASCAL shutdown(SOCKET,int); +WINSOCK_API_LINKAGE SOCKET PASCAL socket(int,int,int); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct hostent *) gethostbyaddr(const char*,int,int); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct hostent *) gethostbyname(const char*); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct servent *) getservbyport(int,const char*); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct servent *) getservbyname(const char*,const char*); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct protoent *) getprotobynumber(int); +WINSOCK_API_LINKAGE DECLARE_STDCALL_P(struct protoent *) getprotobyname(const char*); +typedef SOCKET (PASCAL * LPFN_ACCEPT)(SOCKET, struct sockaddr*,int *); +typedef int (PASCAL * LPFN_BIND)(SOCKET, const struct sockaddr*,int); +typedef int (PASCAL * LPFN_CLOSESOCKET)(SOCKET); +typedef int (PASCAL * LPFN_CONNECT)(SOCKET, const struct sockaddr*,int); +typedef int (PASCAL * LPFN_IOCTLSOCKET)(SOCKET, long, u_long*); +typedef int (PASCAL * LPFN_GETPEERNAME)(SOCKET, struct sockaddr*, int*); +typedef int(PASCAL * LPFN_GETSOCKNAME)(SOCKET, struct sockaddr*, int*); +typedef int(PASCAL * LPFN_GETSOCKOPT)(SOCKET, int, int, char*, int*); +typedef u_long(PASCAL * LPFN_HTONL)(u_long); +typedef u_short(PASCAL * LPFN_HTONS)(u_short); +typedef unsigned long(PASCAL * LPFN_INET_ADDR)(const char*); +typedef char*(PASCAL * LPFN_INET_NTOA)(struct in_addr); +typedef int(PASCAL * LPFN_LISTEN)(SOCKET, int); +typedef u_long(PASCAL * LPFN_NTOHL)(u_long); +typedef u_short(PASCAL * LPFN_NTOHS)(u_short); +typedef int(PASCAL * LPFN_RECV)(SOCKET, char*, int, int); +typedef int(PASCAL * LPFN_RECVFROM)(SOCKET, char*, int, int, struct sockaddr*, int*); +typedef int(PASCAL * LPFN_SELECT)(int, fd_set*, fd_set*, fd_set*, const struct timeval*); +typedef int(PASCAL * LPFN_SEND)(SOCKET, const char*, int, int); +typedef int(PASCAL * LPFN_SENDTO)(SOCKET, const char*, int, int, const struct sockaddr*, int); +typedef int(PASCAL * LPFN_SETSOCKOPT)(SOCKET, int, int, const char*, int); +typedef int(PASCAL * LPFN_SHUTDOWN)(SOCKET, int); +typedef SOCKET(PASCAL * LPFN_SOCKET)(int, int, int); +typedef struct hostent*(PASCAL * LPFN_GETHOSTBYADDR)( const char*, int, int); +typedef struct hostent*(PASCAL * LPFN_GETHOSTBYNAME)( const char*); +typedef int(PASCAL * LPFN_GETHOSTNAME)(char*, int); +typedef struct servent*(PASCAL * LPFN_GETSERVBYPORT)(int, const char*); +typedef struct servent*(PASCAL * LPFN_GETSERVBYNAME)(const char*, const char*); +typedef struct protoent*(PASCAL * LPFN_GETPROTOBYNUMBER)(int); +typedef struct protoent*(PASCAL * LPFN_GETPROTOBYNAME)(const char*); + +WINSOCK_API_LINKAGE int PASCAL WSAStartup(WORD,LPWSADATA); +WINSOCK_API_LINKAGE int PASCAL WSACleanup(void); +WINSOCK_API_LINKAGE void PASCAL WSASetLastError(int); +WINSOCK_API_LINKAGE int PASCAL WSAGetLastError(void); +WINSOCK_API_LINKAGE typedef int(PASCAL * LPFN_WSASTARTUP)(WORD, LPWSADATA); +typedef int(PASCAL * LPFN_WSACLEANUP)(void); +typedef void(PASCAL * LPFN_WSASETLASTERROR)(int); +typedef int(PASCAL * LPFN_WSAGETLASTERROR)(void); +/* + * Pseudo-blocking functions are deprecated in WinSock2 + * spec. Use threads instead. + */ +WINSOCK_API_LINKAGE BOOL PASCAL WSAIsBlocking(void); +WINSOCK_API_LINKAGE int PASCAL WSAUnhookBlockingHook(void); +WINSOCK_API_LINKAGE FARPROC PASCAL WSASetBlockingHook(FARPROC); +WINSOCK_API_LINKAGE int PASCAL WSACancelBlockingCall(void); +typedef BOOL(PASCAL * LPFN_WSAISBLOCKING)(void); +typedef int(PASCAL * LPFN_WSAUNHOOKBLOCKINGHOOK)(void); +typedef FARPROC (PASCAL * LPFN_WSASETBLOCKINGHOOK)(FARPROC); +typedef int(PASCAL * LPFN_WSACANCELBLOCKINGCALL)(void); + +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetServByName(HWND,u_int,const char*,const char*,char*,int); +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetServByPort(HWND,u_int,int,const char*,char*,int); +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetProtoByName(HWND,u_int,const char*,char*,int); +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetProtoByNumber(HWND,u_int,int,char*,int); +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetHostByName(HWND,u_int,const char*,char*,int); +WINSOCK_API_LINKAGE HANDLE PASCAL WSAAsyncGetHostByAddr(HWND,u_int,const char*,int,int,char*,int); +WINSOCK_API_LINKAGE int PASCAL WSACancelAsyncRequest(HANDLE); +WINSOCK_API_LINKAGE int PASCAL WSAAsyncSelect(SOCKET,HWND,u_int,long); +typedef HANDLE(PASCAL * LPFN_WSAASYNCGETSERVBYNAME)(HWND, u_int, const char *, const char *, char *, int); +typedef HANDLE(PASCAL * LPFN_WSAASYNCGETSERVBYPORT)(HWND, u_int, int, const char *, char *, int); +typedef HANDLE(PASCAL * LPFN_WSAASYNCGETPROTOBYNAME)(HWND, u_int, const char*, char*, int); +typedef HANDLE(PASCAL * LPFN_WSAASYNCGETPROTOBYNUMBER)(HWND, u_int, int, char*, int); +typedef HANDLE(PASCAL * LPFN_WSAASYNCGETHOSTBYADDR)(HWND, u_int, const char*, int, int, char*, int); +typedef int(PASCAL * LPFN_WSACANCELASYNCREQUEST)(HANDLE); +typedef int(PASCAL * LPFN_WSAASYNCSELECT)(SOCKET, HWND, u_int, long); +#if ! (defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) +WINSOCK_API_LINKAGE u_long PASCAL htonl(u_long); +WINSOCK_API_LINKAGE u_long PASCAL ntohl(u_long); +WINSOCK_API_LINKAGE u_short PASCAL htons(u_short); +WINSOCK_API_LINKAGE u_short PASCAL ntohs(u_short); +WINSOCK_API_LINKAGE int PASCAL select(int nfds,fd_set*,fd_set*,fd_set*,const struct timeval*); +#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */ + +int PASCAL gethostname(char*,int); + +#define WSAMAKEASYNCREPLY(b,e) MAKELONG(b,e) +#define WSAMAKESELECTREPLY(e,error) MAKELONG(e,error) +#define WSAGETASYNCBUFLEN(l) LOWORD(l) +#define WSAGETASYNCERROR(l) HIWORD(l) +#define WSAGETSELECTEVENT(l) LOWORD(l) +#define WSAGETSELECTERROR(l) HIWORD(l) + +typedef struct sockaddr SOCKADDR; +typedef struct sockaddr *PSOCKADDR; +typedef struct sockaddr *LPSOCKADDR; +typedef struct sockaddr_storage SOCKADDR_STORAGE, *PSOCKADDR_STORAGE; +typedef struct sockaddr_in SOCKADDR_IN; +typedef struct sockaddr_in *PSOCKADDR_IN; +typedef struct sockaddr_in *LPSOCKADDR_IN; +typedef struct linger LINGER; +typedef struct linger *PLINGER; +typedef struct linger *LPLINGER; +typedef struct in_addr IN_ADDR; +typedef struct in_addr *PIN_ADDR; +typedef struct in_addr *LPIN_ADDR; +typedef struct fd_set FD_SET; +typedef struct fd_set *PFD_SET; +typedef struct fd_set *LPFD_SET; +typedef struct hostent HOSTENT; +typedef struct hostent *PHOSTENT; +typedef struct hostent *LPHOSTENT; +typedef struct servent SERVENT; +typedef struct servent *PSERVENT; +typedef struct servent *LPSERVENT; +typedef struct protoent PROTOENT; +typedef struct protoent *PPROTOENT; +typedef struct protoent *LPPROTOENT; +typedef struct timeval TIMEVAL; +typedef struct timeval *PTIMEVAL; +typedef struct timeval *LPTIMEVAL; + +/* winsock2 additions */ +#define ADDR_ANY INADDR_ANY + +#define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000) +#define IN_CLASSD_NET 0xf0000000 +#define IN_CLASSD_NSHIFT 28 +#define IN_CLASSD_HOST 0x0fffffff +#define IN_MULTICAST(i) IN_CLASSD(i) + +#define FROM_PROTOCOL_INFO (-1) + +#define SO_DONTLINGER (u_int)(~SO_LINGER) +#define SO_GROUP_ID 0x2001 +#define SO_GROUP_PRIORITY 0x2002 +#define SO_MAX_MSG_SIZE 0x2003 +#define SO_PROTOCOL_INFOA 0x2004 +#define SO_PROTOCOL_INFOW 0x2005 +#ifdef UNICODE +#define SO_PROTOCOL_INFO SO_PROTOCOL_INFOW +#else +#define SO_PROTOCOL_INFO SO_PROTOCOL_INFOA +#endif +#define PVD_CONFIG 0x3001 + +#define MSG_INTERRUPT 0x10 +#define MSG_MAXIOVLEN 16 + +#define WSAAPI WINAPI +#define WSAEVENT HANDLE +#define LPWSAEVENT LPHANDLE +#define WSAOVERLAPPED OVERLAPPED +typedef struct _OVERLAPPED *LPWSAOVERLAPPED; + +#define WSA_IO_PENDING (ERROR_IO_PENDING) +#define WSA_IO_INCOMPLETE (ERROR_IO_INCOMPLETE) +#define WSA_INVALID_HANDLE (ERROR_INVALID_HANDLE) +#define WSA_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) +#define WSA_NOT_ENOUGH_MEMORY (ERROR_NOT_ENOUGH_MEMORY) +#define WSA_OPERATION_ABORTED (ERROR_OPERATION_ABORTED) + +#define WSA_INVALID_EVENT ((WSAEVENT)NULL) +#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS) +#define WSA_WAIT_FAILED ((DWORD)-1L) +#define WSA_WAIT_EVENT_0 (WAIT_OBJECT_0) +#define WSA_WAIT_IO_COMPLETION (WAIT_IO_COMPLETION) +#define WSA_WAIT_TIMEOUT (WAIT_TIMEOUT) +#define WSA_INFINITE (INFINITE) + +typedef struct _WSABUF { + unsigned long len; + char *buf; +} WSABUF, *LPWSABUF; + +typedef enum +{ + BestEffortService, + ControlledLoadService, + PredictiveService, + GuaranteedDelayService, + GuaranteedService +} GUARANTEE; + +/* TODO: FLOWSPEC and related definitions belong in qos.h */ + +/* + Windows Sockets 2 Application Programming Interface, + revision 2.2.2 (1997) uses the type uint32 for SERVICETYPE + and the elements of _flowspec, but the type uint32 is not defined + or used anywhere else in the w32api. For now, just use + unsigned int, which is 32 bits on _WIN32 and _WIN64. +*/ + +typedef unsigned int SERVICETYPE; +typedef struct _flowspec +{ + unsigned int TokenRate; + unsigned int TokenBucketSize; + unsigned int PeakBandwidth; + unsigned int Latency; + unsigned int DelayVariation; + SERVICETYPE ServiceType; + unsigned int MaxSduSize; + unsigned int MinimumPolicedSize; + } FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC; + +typedef struct _QualityOfService +{ + FLOWSPEC SendingFlowspec; + FLOWSPEC ReceivingFlowspec; + WSABUF ProviderSpecific; +} QOS, *LPQOS; + +#define CF_ACCEPT 0x0000 +#define CF_REJECT 0x0001 +#define CF_DEFER 0x0002 +#define SD_RECEIVE 0x00 +#define SD_SEND 0x01 +#define SD_BOTH 0x02 +typedef unsigned int GROUP; + +#define SG_UNCONSTRAINED_GROUP 0x01 +#define SG_CONSTRAINED_GROUP 0x02 +typedef struct _WSANETWORKEVENTS { + long lNetworkEvents; + int iErrorCode[FD_MAX_EVENTS]; +} WSANETWORKEVENTS, *LPWSANETWORKEVENTS; + +#define MAX_PROTOCOL_CHAIN 7 + +#define BASE_PROTOCOL 1 +#define LAYERED_PROTOCOL 0 + +typedef enum _WSAESETSERVICEOP +{ + RNRSERVICE_REGISTER=0, + RNRSERVICE_DEREGISTER, + RNRSERVICE_DELETE +} WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP; + +typedef struct _AFPROTOCOLS { + INT iAddressFamily; + INT iProtocol; +} AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS; + +typedef enum _WSAEcomparator +{ + COMP_EQUAL = 0, + COMP_NOTLESS +} WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR; + +typedef struct _WSAVersion +{ + DWORD dwVersion; + WSAECOMPARATOR ecHow; +} WSAVERSION, *PWSAVERSION, *LPWSAVERSION; + +#ifndef __CSADDR_T_DEFINED /* also in nspapi.h */ +#define __CSADDR_T_DEFINED +typedef struct _SOCKET_ADDRESS { + LPSOCKADDR lpSockaddr; + INT iSockaddrLength; +} SOCKET_ADDRESS,*PSOCKET_ADDRESS,*LPSOCKET_ADDRESS; +typedef struct _CSADDR_INFO { + SOCKET_ADDRESS LocalAddr; + SOCKET_ADDRESS RemoteAddr; + INT iSocketType; + INT iProtocol; +} CSADDR_INFO,*PCSADDR_INFO,*LPCSADDR_INFO; +#endif + +typedef struct _SOCKET_ADDRESS_LIST { + INT iAddressCount; + SOCKET_ADDRESS Address[1]; +} SOCKET_ADDRESS_LIST, * LPSOCKET_ADDRESS_LIST; + +#ifndef __BLOB_T_DEFINED /* also in wtypes.h and nspapi.h */ +#define __BLOB_T_DEFINED +typedef struct _BLOB { + ULONG cbSize; + BYTE *pBlobData; +} BLOB,*PBLOB,*LPBLOB; +#endif + +typedef struct _WSAQuerySetA +{ + DWORD dwSize; + LPSTR lpszServiceInstanceName; + LPGUID lpServiceClassId; + LPWSAVERSION lpVersion; + LPSTR lpszComment; + DWORD dwNameSpace; + LPGUID lpNSProviderId; + LPSTR lpszContext; + DWORD dwNumberOfProtocols; + LPAFPROTOCOLS lpafpProtocols; + LPSTR lpszQueryString; + DWORD dwNumberOfCsAddrs; + LPCSADDR_INFO lpcsaBuffer; + DWORD dwOutputFlags; + LPBLOB lpBlob; +} WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA; + +typedef struct _WSAQuerySetW +{ + DWORD dwSize; + LPWSTR lpszServiceInstanceName; + LPGUID lpServiceClassId; + LPWSAVERSION lpVersion; + LPWSTR lpszComment; + DWORD dwNameSpace; + LPGUID lpNSProviderId; + LPWSTR lpszContext; + DWORD dwNumberOfProtocols; + LPAFPROTOCOLS lpafpProtocols; + LPWSTR lpszQueryString; + DWORD dwNumberOfCsAddrs; + LPCSADDR_INFO lpcsaBuffer; + DWORD dwOutputFlags; + LPBLOB lpBlob; +} WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW; + +#ifdef UNICODE +typedef WSAQUERYSETW WSAQUERYSET; +typedef PWSAQUERYSETW PWSAQUERYSET; +typedef LPWSAQUERYSETW LPWSAQUERYSET; +#else +typedef WSAQUERYSETA WSAQUERYSET; +typedef PWSAQUERYSETA PWSAQUERYSET; +typedef LPWSAQUERYSETA LPWSAQUERYSET; +#endif + +#define LUP_DEEP 0x0001 +#define LUP_CONTAINERS 0x0002 +#define LUP_NOCONTAINERS 0x0004 +#define LUP_NEAREST 0x0008 +#define LUP_RETURN_NAME 0x0010 +#define LUP_RETURN_TYPE 0x0020 +#define LUP_RETURN_VERSION 0x0040 +#define LUP_RETURN_COMMENT 0x0080 +#define LUP_RETURN_ADDR 0x0100 +#define LUP_RETURN_BLOB 0x0200 +#define LUP_RETURN_ALIASES 0x0400 +#define LUP_RETURN_QUERY_STRING 0x0800 +#define LUP_RETURN_ALL 0x0FF0 +#define LUP_RES_SERVICE 0x8000 +#define LUP_FLUSHCACHE 0x1000 +#define LUP_FLUSHPREVIOUS 0x2000 + +typedef struct _WSANSClassInfoA +{ + LPSTR lpszName; + DWORD dwNameSpace; + DWORD dwValueType; + DWORD dwValueSize; + LPVOID lpValue; +} WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA; + +typedef struct _WSANSClassInfoW +{ + LPWSTR lpszName; + DWORD dwNameSpace; + DWORD dwValueType; + DWORD dwValueSize; + LPVOID lpValue; +} WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW; + +#ifdef UNICODE +typedef WSANSCLASSINFOW WSANSCLASSINFO; +typedef PWSANSCLASSINFOW PWSANSCLASSINFO; +typedef LPWSANSCLASSINFOW LPWSANSCLASSINFO; +#else +typedef WSANSCLASSINFOA WSANSCLASSINFO; +typedef PWSANSCLASSINFOA PWSANSCLASSINFO; +typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO; +#endif + +typedef struct _WSAServiceClassInfoA +{ + LPGUID lpServiceClassId; + LPSTR lpszServiceClassName; + DWORD dwCount; + LPWSANSCLASSINFOA lpClassInfos; +} WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA; + +typedef struct _WSAServiceClassInfoW +{ + LPGUID lpServiceClassId; + LPWSTR lpszServiceClassName; + DWORD dwCount; + LPWSANSCLASSINFOW lpClassInfos; +} WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW; + +#ifdef UNICODE +typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO; +typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO; +typedef LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO; +#else +typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO; +typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO; +typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO; +#endif + +typedef struct _WSANAMESPACE_INFOA { + GUID NSProviderId; + DWORD dwNameSpace; + BOOL fActive; + DWORD dwVersion; + LPSTR lpszIdentifier; +} WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA; + +typedef struct _WSANAMESPACE_INFOW { + GUID NSProviderId; + DWORD dwNameSpace; + BOOL fActive; + DWORD dwVersion; + LPWSTR lpszIdentifier; +} WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW; + +#ifdef UNICODE +typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO; +typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO; +typedef LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO; +#else +typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO; +typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO; +typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO; +#endif + +typedef struct _WSAPROTOCOLCHAIN { + int ChainLen; + DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; +} WSAPROTOCOLCHAIN, *LPWSAPROTOCOLCHAIN; + +#define WSAPROTOCOL_LEN 255 + +typedef struct _WSAPROTOCOL_INFOA { + DWORD dwServiceFlags1; + DWORD dwServiceFlags2; + DWORD dwServiceFlags3; + DWORD dwServiceFlags4; + DWORD dwProviderFlags; + GUID ProviderId; + DWORD dwCatalogEntryId; + WSAPROTOCOLCHAIN ProtocolChain; + int iVersion; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + int iProtocolMaxOffset; + int iNetworkByteOrder; + int iSecurityScheme; + DWORD dwMessageSize; + DWORD dwProviderReserved; + CHAR szProtocol[WSAPROTOCOL_LEN+1]; +} WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA; + +typedef struct _WSAPROTOCOL_INFOW { + DWORD dwServiceFlags1; + DWORD dwServiceFlags2; + DWORD dwServiceFlags3; + DWORD dwServiceFlags4; + DWORD dwProviderFlags; + GUID ProviderId; + DWORD dwCatalogEntryId; + WSAPROTOCOLCHAIN ProtocolChain; + int iVersion; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + int iProtocolMaxOffset; + int iNetworkByteOrder; + int iSecurityScheme; + DWORD dwMessageSize; + DWORD dwProviderReserved; + WCHAR szProtocol[WSAPROTOCOL_LEN+1]; +} WSAPROTOCOL_INFOW, * LPWSAPROTOCOL_INFOW; + +typedef int (CALLBACK *LPCONDITIONPROC)(LPWSABUF, LPWSABUF, LPQOS, LPQOS, LPWSABUF, LPWSABUF, GROUP *, DWORD); +typedef void (WINAPI *LPWSAOVERLAPPED_COMPLETION_ROUTINE)(DWORD, DWORD, LPWSAOVERLAPPED, DWORD); + + +#ifdef UNICODE +typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO; +typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO; +#else +typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO; +typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO; +#endif + +/* Needed for XP & .NET Server function WSANSPIoctl. */ +typedef enum _WSACOMPLETIONTYPE { + NSP_NOTIFY_IMMEDIATELY = 0, + NSP_NOTIFY_HWND, + NSP_NOTIFY_EVENT, + NSP_NOTIFY_PORT, + NSP_NOTIFY_APC +} WSACOMPLETIONTYPE, * PWSACOMPLETIONTYPE, * LPWSACOMPLETIONTYPE; +typedef struct _WSACOMPLETION { + WSACOMPLETIONTYPE Type; + union { + struct { + HWND hWnd; + UINT uMsg; + WPARAM context; + } WindowMessage; + struct { + LPWSAOVERLAPPED lpOverlapped; + } Event; + struct { + LPWSAOVERLAPPED lpOverlapped; + LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc; + } Apc; + struct { + LPWSAOVERLAPPED lpOverlapped; + HANDLE hPort; + ULONG_PTR Key; + } Port; + } Parameters; +} WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION; + +#define PFL_MULTIPLE_PROTO_ENTRIES 0x00000001 +#define PFL_RECOMMENDED_PROTO_ENTRY 0x00000002 +#define PFL_HIDDEN 0x00000004 +#define PFL_MATCHES_PROTOCOL_ZERO 0x00000008 +#define XP1_CONNECTIONLESS 0x00000001 +#define XP1_GUARANTEED_DELIVERY 0x00000002 +#define XP1_GUARANTEED_ORDER 0x00000004 +#define XP1_MESSAGE_ORIENTED 0x00000008 +#define XP1_PSEUDO_STREAM 0x00000010 +#define XP1_GRACEFUL_CLOSE 0x00000020 +#define XP1_EXPEDITED_DATA 0x00000040 +#define XP1_CONNECT_DATA 0x00000080 +#define XP1_DISCONNECT_DATA 0x00000100 +#define XP1_SUPPORT_BROADCAST 0x00000200 +#define XP1_SUPPORT_MULTIPOINT 0x00000400 +#define XP1_MULTIPOINT_CONTROL_PLANE 0x00000800 +#define XP1_MULTIPOINT_DATA_PLANE 0x00001000 +#define XP1_QOS_SUPPORTED 0x00002000 +#define XP1_INTERRUPT 0x00004000 +#define XP1_UNI_SEND 0x00008000 +#define XP1_UNI_RECV 0x00010000 +#define XP1_IFS_HANDLES 0x00020000 +#define XP1_PARTIAL_MESSAGE 0x00040000 + +#define BIGENDIAN 0x0000 +#define LITTLEENDIAN 0x0001 + +#define SECURITY_PROTOCOL_NONE 0x0000 +#define JL_SENDER_ONLY 0x01 +#define JL_RECEIVER_ONLY 0x02 +#define JL_BOTH 0x04 +#define WSA_FLAG_OVERLAPPED 0x01 +#define WSA_FLAG_MULTIPOINT_C_ROOT 0x02 +#define WSA_FLAG_MULTIPOINT_C_LEAF 0x04 +#define WSA_FLAG_MULTIPOINT_D_ROOT 0x08 +#define WSA_FLAG_MULTIPOINT_D_LEAF 0x10 +#define IOC_UNIX 0x00000000 +#define IOC_WS2 0x08000000 +#define IOC_PROTOCOL 0x10000000 +#define IOC_VENDOR 0x18000000 + +#define _WSAIO(x,y) (IOC_VOID|(x)|(y)) +#define _WSAIOR(x,y) (IOC_OUT|(x)|(y)) +#define _WSAIOW(x,y) (IOC_IN|(x)|(y)) +#define _WSAIORW(x,y) (IOC_INOUT|(x)|(y)) + +#define SIO_ASSOCIATE_HANDLE _WSAIOW(IOC_WS2,1) +#define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2) +#define SIO_FIND_ROUTE _WSAIOR(IOC_WS2,3) +#define SIO_FLUSH _WSAIO(IOC_WS2,4) +#define SIO_GET_BROADCAST_ADDRESS _WSAIOR(IOC_WS2,5) +#define SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2,6) +#define SIO_GET_QOS _WSAIORW(IOC_WS2,7) +#define SIO_GET_GROUP_QOS _WSAIORW(IOC_WS2,8) +#define SIO_MULTIPOINT_LOOPBACK _WSAIOW(IOC_WS2,9) +#define SIO_MULTICAST_SCOPE _WSAIOW(IOC_WS2,10) +#define SIO_SET_QOS _WSAIOW(IOC_WS2,11) +#define SIO_SET_GROUP_QOS _WSAIOW(IOC_WS2,12) +#define SIO_TRANSLATE_HANDLE _WSAIORW(IOC_WS2,13) +#define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20) +#define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21) +#define SIO_ADDRESS_LIST_QUERY _WSAIOR(IOC_WS2,22) +#define SIO_ADDRESS_LIST_CHANGE _WSAIO(IOC_WS2,23) +#define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_WS2,24) +#define SIO_NSP_NOTIFY_CHANGE _WSAIOW(IOC_WS2,25) + +#define TH_NETDEV 0x00000001 +#define TH_TAPI 0x00000002 + +WINSOCK_API_LINKAGE SOCKET WINAPI WSAAccept(SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD); +WINSOCK_API_LINKAGE INT WINAPI WSAAddressToStringA(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD); +WINSOCK_API_LINKAGE INT WINAPI WSAAddressToStringW(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD); +WINSOCK_API_LINKAGE BOOL WINAPI WSACloseEvent(WSAEVENT); +WINSOCK_API_LINKAGE int WINAPI WSAConnect(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS); +WINSOCK_API_LINKAGE WSAEVENT WINAPI WSACreateEvent(void); +WINSOCK_API_LINKAGE int WINAPI WSADuplicateSocketA(SOCKET, DWORD, LPWSAPROTOCOL_INFOA); +WINSOCK_API_LINKAGE int WINAPI WSADuplicateSocketW(SOCKET, DWORD, LPWSAPROTOCOL_INFOW); +WINSOCK_API_LINKAGE INT WINAPI WSAEnumNameSpaceProvidersA(LPDWORD, LPWSANAMESPACE_INFOA); +WINSOCK_API_LINKAGE INT WINAPI WSAEnumNameSpaceProvidersW(LPDWORD, LPWSANAMESPACE_INFOW); +WINSOCK_API_LINKAGE int WINAPI WSAEnumNetworkEvents(SOCKET, WSAEVENT, LPWSANETWORKEVENTS); +WINSOCK_API_LINKAGE int WINAPI WSAEnumProtocolsA(LPINT, LPWSAPROTOCOL_INFOA, LPDWORD); +WINSOCK_API_LINKAGE int WINAPI WSAEnumProtocolsW(LPINT, LPWSAPROTOCOL_INFOW, LPDWORD); +WINSOCK_API_LINKAGE int WINAPI WSAEventSelect(SOCKET, WSAEVENT, long); +WINSOCK_API_LINKAGE BOOL WINAPI WSAGetOverlappedResult(SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD); +WINSOCK_API_LINKAGE BOOL WINAPI WSAGetQOSByName(SOCKET, LPWSABUF, LPQOS); +WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassInfoA(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA); +WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassInfoW(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW); +WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassNameByClassIdA(LPGUID, LPSTR, LPDWORD); +WINSOCK_API_LINKAGE INT WINAPI WSAGetServiceClassNameByClassIdW(LPGUID, LPWSTR, LPDWORD); +WINSOCK_API_LINKAGE int WINAPI WSAHtonl(SOCKET, unsigned long, unsigned long *); +WINSOCK_API_LINKAGE int WINAPI WSAHtons(SOCKET, unsigned short, unsigned short *); +WINSOCK_API_LINKAGE INT WINAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA); +WINSOCK_API_LINKAGE INT WINAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW); +WINSOCK_API_LINKAGE int WINAPI WSAIoctl(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +WINSOCK_API_LINKAGE SOCKET WINAPI WSAJoinLeaf(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD); +WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceBeginA(LPWSAQUERYSETA, DWORD, LPHANDLE); +WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceBeginW(LPWSAQUERYSETW lpqsRestrictions, DWORD, LPHANDLE); +WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceNextA(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA); +WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceNextW(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW); +WINSOCK_API_LINKAGE INT WINAPI WSALookupServiceEnd(HANDLE); +WINSOCK_API_LINKAGE int WINAPI WSANSPIoctl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION); /* XP or .NET Server */ +WINSOCK_API_LINKAGE int WINAPI WSANtohl(SOCKET, unsigned long, unsigned long *); +WINSOCK_API_LINKAGE int WINAPI WSANtohs(SOCKET, unsigned short, unsigned short *); +WINSOCK_API_LINKAGE int WINAPI WSARecv(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +WINSOCK_API_LINKAGE int WINAPI WSARecvDisconnect(SOCKET, LPWSABUF); +WINSOCK_API_LINKAGE int WINAPI WSARecvFrom(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, struct sockaddr *, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +WINSOCK_API_LINKAGE INT WINAPI WSARemoveServiceClass(LPGUID); +WINSOCK_API_LINKAGE BOOL WINAPI WSAResetEvent(WSAEVENT); +WINSOCK_API_LINKAGE int WINAPI WSASend(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +WINSOCK_API_LINKAGE int WINAPI WSASendDisconnect(SOCKET, LPWSABUF); +WINSOCK_API_LINKAGE int WINAPI WSASendTo(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +WINSOCK_API_LINKAGE BOOL WINAPI WSASetEvent(WSAEVENT); +WINSOCK_API_LINKAGE INT WSAAPI WSASetServiceA(LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD); +WINSOCK_API_LINKAGE INT WINAPI WSASetServiceW(LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD); +WINSOCK_API_LINKAGE SOCKET WINAPI WSASocketA(int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD); +WINSOCK_API_LINKAGE SOCKET WINAPI WSASocketW(int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD); +WINSOCK_API_LINKAGE INT WINAPI WSAStringToAddressA(LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT); +WINSOCK_API_LINKAGE INT WINAPI WSAStringToAddressW(LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT); +WINSOCK_API_LINKAGE DWORD WINAPI WSAWaitForMultipleEvents(DWORD, const WSAEVENT *, BOOL, DWORD, BOOL); + +typedef SOCKET (WINAPI *LPFN_WSAACCEPT)(SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD); +typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGA)(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD); +typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGW)(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD); +typedef BOOL (WINAPI *LPFN_WSACLOSEEVENT)(WSAEVENT); +typedef int (WINAPI *LPFN_WSACONNECT)(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS); +typedef WSAEVENT (WINAPI *LPFN_WSACREATEEVENT)(void); +typedef int (WINAPI *LPFN_WSADUPLICATESOCKETA)(SOCKET, DWORD, LPWSAPROTOCOL_INFOA); +typedef int (WINAPI *LPFN_WSADUPLICATESOCKETW)(SOCKET, DWORD, LPWSAPROTOCOL_INFOW); +typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSA)(LPDWORD, LPWSANAMESPACE_INFOA); +typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSW)(LPDWORD, LPWSANAMESPACE_INFOW); +typedef int (WINAPI *LPFN_WSAENUMNETWORKEVENTS)(SOCKET, WSAEVENT, LPWSANETWORKEVENTS); +typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSA)(LPINT, LPWSAPROTOCOL_INFOA, LPDWORD); +typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSW)(LPINT, LPWSAPROTOCOL_INFOW, LPDWORD); +typedef int (WINAPI *LPFN_WSAEVENTSELECT)(SOCKET, WSAEVENT, long); +typedef BOOL (WINAPI *LPFN_WSAGETOVERLAPPEDRESULT)(SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD); +typedef BOOL (WINAPI *LPFN_WSAGETQOSBYNAME)(SOCKET, LPWSABUF, LPQOS); +typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOA)(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA); +typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOW)(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW); +typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA)(LPGUID, LPSTR, LPDWORD); +typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW)(LPGUID, LPWSTR, LPDWORD); +typedef int (WINAPI *LPFN_WSAHTONL)(SOCKET, unsigned long, unsigned long *); +typedef int (WINAPI *LPFN_WSAHTONS)(SOCKET, unsigned short, unsigned short *); +typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSA)(LPWSASERVICECLASSINFOA); +typedef INT (WINAPI *LPFN_WSAINSTALLSERVICECLASSW)(LPWSASERVICECLASSINFOW); +typedef int (WINAPI *LPFN_WSAIOCTL)(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +typedef SOCKET (WINAPI *LPFN_WSAJOINLEAF)(SOCKET, const struct sockaddr *, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD); +typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINA)(LPWSAQUERYSETA, DWORD, LPHANDLE); +typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINW)(LPWSAQUERYSETW, DWORD, LPHANDLE); +typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTA)(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA); +typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTW)(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW); +typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEEND)(HANDLE); +typedef int (WINAPI *LPFN_WSANSPIoctl)(HANDLE, DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION); +typedef int (WINAPI *LPFN_WSANTOHL)(SOCKET, unsigned long, unsigned long *); +typedef int (WINAPI *LPFN_WSANTOHS)(SOCKET, unsigned short, unsigned short *); +typedef int (WINAPI *LPFN_WSARECV)(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +typedef int (WINAPI *LPFN_WSARECVDISCONNECT)(SOCKET, LPWSABUF); +typedef int (WINAPI *LPFN_WSARECVFROM)(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, struct sockaddr *, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +typedef INT (WINAPI *LPFN_WSAREMOVESERVICECLASS)(LPGUID); +typedef BOOL (WINAPI *LPFN_WSARESETEVENT)(WSAEVENT); +typedef int (WINAPI *LPFN_WSASEND)(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +typedef int (WINAPI *LPFN_WSASENDDISCONNECT)(SOCKET, LPWSABUF); +typedef int (WINAPI *LPFN_WSASENDTO)(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, const struct sockaddr *, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); +typedef BOOL (WINAPI *LPFN_WSASETEVENT)(WSAEVENT); +typedef INT (WINAPI *LPFN_WSASETSERVICEA)(LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD); +typedef INT (WINAPI *LPFN_WSASETSERVICEW)(LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD); +typedef SOCKET (WINAPI *LPFN_WSASOCKETA)(int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD); +typedef SOCKET (WINAPI *LPFN_WSASOCKETW)(int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD); +typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSA)(LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT); +typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSW)(LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT); +typedef DWORD (WINAPI *LPFN_WSAWAITFORMULTIPLEEVENTS)(DWORD, const WSAEVENT *, BOOL, DWORD, BOOL); + +#ifdef UNICODE +#define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGW +#define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETW +#define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW +#define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSW +#define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOW +#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW +#define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSW +#define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINW +#define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTW +#define LPFN_WSASETSERVICE LPFN_WSASETSERVICEW +#define LPFN_WSASOCKET LPFN_WSASOCKETW +#define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSW +#define WSAAddressToString WSAAddressToStringW +#define WSADuplicateSocket WSADuplicateSocketW +#define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersW +#define WSAEnumProtocols WSAEnumProtocolsW +#define WSAGetServiceClassInfo WSAGetServiceClassInfoW +#define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdW +#define WSASetService WSASetServiceW +#define WSASocket WSASocketW +#define WSAStringToAddress WSAStringToAddressW +#define WSALookupServiceBegin WSALookupServiceBeginW +#define WSALookupServiceNext WSALookupServiceNextW +#define WSAInstallServiceClass WSAInstallServiceClassW +#else +#define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGA +#define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETW +#define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSA +#define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSA +#define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOA +#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA +#define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSA +#define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINA +#define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTA +#define LPFN_WSASETSERVICE LPFN_WSASETSERVICEA +#define LPFN_WSASOCKET LPFN_WSASOCKETA +#define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSA +#define WSAAddressToString WSAAddressToStringA +#define WSADuplicateSocket WSADuplicateSocketA +#define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersA +#define WSAEnumProtocols WSAEnumProtocolsA +#define WSAGetServiceClassInfo WSAGetServiceClassInfoA +#define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdA +#define WSAInstallServiceClass WSAInstallServiceClassA +#define WSALookupServiceBegin WSALookupServiceBeginA +#define WSALookupServiceNext WSALookupServiceNextA +#define WSASocket WSASocketA +#define WSAStringToAddress WSAStringToAddressA +#define WSASetService WSASetServiceA +#endif + +#ifdef __cplusplus +} +#endif +#endif