From 9c3e84177177dece1995eab03947152f7525e39c Mon Sep 17 00:00:00 2001 From: CNLohr Date: Sun, 16 Dec 2018 01:21:05 -0500 Subject: [PATCH] Fix ColorChord on Windows10 32-bit TinyCC Compilation. --- colorchord2/DisplayNetwork.c | 3 ++- colorchord2/DisplayOUTDriver.c | 2 +- colorchord2/OutputVoronoi.c | 2 +- colorchord2/colorchord.exe | Bin 0 -> 181248 bytes colorchord2/hidapi.c | 33 ++++++++++++++++++++++++++++++++ colorchord2/main.c | 1 + colorchord2/notefinder.c | 1 - colorchord2/sound_win.c | 26 ++++++++++++++++--------- colorchord2/windows/compile.bat | 11 +++++++---- colorchord2/windows/run.bat | 3 +++ colorchord2/windows/tcc_stubs.c | 13 +++++++++---- 11 files changed, 74 insertions(+), 21 deletions(-) create mode 100644 colorchord2/colorchord.exe create mode 100644 colorchord2/windows/run.bat diff --git a/colorchord2/DisplayNetwork.c b/colorchord2/DisplayNetwork.c index 3471ce2..b2bb3e3 100644 --- a/colorchord2/DisplayNetwork.c +++ b/colorchord2/DisplayNetwork.c @@ -17,6 +17,7 @@ #endif #define MSG_NOSIGNAL 0 #else +#define closesocket( x ) close( x ) #include #include #include @@ -191,7 +192,7 @@ static void DPOUpdate(void * id, struct NoteFinder*nf) if( r < 0 ) { fprintf( stderr, "Send fault.\n" ); - close( d->socket ); + closesocket( d->socket ); d->socket = -1; } } diff --git a/colorchord2/DisplayOUTDriver.c b/colorchord2/DisplayOUTDriver.c index 892e41a..f848bdd 100644 --- a/colorchord2/DisplayOUTDriver.c +++ b/colorchord2/DisplayOUTDriver.c @@ -88,7 +88,7 @@ static void DPOUpdate(void * id, struct NoteFinder*nf) for( i = 0; i < d->note_peaks; i++ ) { struct LINote * l = &d->notes[i]; - l->ledexp = pow( nf->note_amplitudes2[i], d->pow ) - d->cutoff; + l->ledexp = powf( nf->note_amplitudes2[i], d->pow ) - d->cutoff; if( l->ledexp < 0 ) l->ledexp = 0; totalexp += l->ledexp; } diff --git a/colorchord2/OutputVoronoi.c b/colorchord2/OutputVoronoi.c index 2eb20c1..c43c1af 100644 --- a/colorchord2/OutputVoronoi.c +++ b/colorchord2/OutputVoronoi.c @@ -56,7 +56,7 @@ static void DPOUpdate(void * id, struct NoteFinder*nf) for( i = 0; i < d->note_peaks; i++ ) { struct LINote * l = &d->notes[i]; - l->ledexp = pow( nf->note_amplitudes2[i], d->amppow ) - d->cutoff; + l->ledexp = powf( nf->note_amplitudes2[i], d->amppow ) - d->cutoff; if( l->ledexp < 0 ) l->ledexp = 0; totalexp += l->ledexp; if( d->from_sides ) diff --git a/colorchord2/colorchord.exe b/colorchord2/colorchord.exe new file mode 100644 index 0000000000000000000000000000000000000000..7afcc430312579b5bd01608209b4082f9e95ab46 GIT binary patch literal 181248 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 I_*{Vh2O%KM8~^|S literal 0 HcmV?d00001 diff --git a/colorchord2/hidapi.c b/colorchord2/hidapi.c index ceb7832..225c8a8 100644 --- a/colorchord2/hidapi.c +++ b/colorchord2/hidapi.c @@ -97,6 +97,39 @@ extern "C" { }; #define CTL_CODE(t,f,m,a) (((t)<<16)|((a)<<14)|((f)<<2)|(m)) +#define WINSETUPAPI __declspec(dllimport) //XXX Should these be CDECL? +WINSETUPAPI BOOL SetupDiEnumDeviceInterfaces( + HDEVINFO DeviceInfoSet, + PSP_DEVINFO_DATA DeviceInfoData, + const GUID *InterfaceClassGuid, + DWORD MemberIndex, + PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData +); +WINSETUPAPI BOOL SetupDiGetDeviceInterfaceDetailA( + HDEVINFO DeviceInfoSet, + PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + PSP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetailData, + DWORD DeviceInterfaceDetailDataSize, + PDWORD RequiredSize, + PSP_DEVINFO_DATA DeviceInfoData +); +WINSETUPAPI BOOL SetupDiEnumDeviceInfo( + HDEVINFO DeviceInfoSet, + DWORD MemberIndex, + PSP_DEVINFO_DATA DeviceInfoData +); +WINSETUPAPI BOOL SetupDiGetDeviceRegistryPropertyA( + HDEVINFO DeviceInfoSet, + PSP_DEVINFO_DATA DeviceInfoData, + DWORD Property, + PDWORD PropertyRegDataType, + PBYTE PropertyBuffer, + DWORD PropertyBufferSize, + PDWORD RequiredSize +); +WINSETUPAPI BOOL SetupDiDestroyDeviceInfoList( + HDEVINFO DeviceInfoSet +); #else #include #include diff --git a/colorchord2/main.c b/colorchord2/main.c index fa4741f..adc00c6 100644 --- a/colorchord2/main.c +++ b/colorchord2/main.c @@ -166,6 +166,7 @@ int main(int argc, char ** argv) { int i; #ifdef TCC + void ManuallyRegisterDevices(); ManuallyRegisterDevices(); #endif diff --git a/colorchord2/notefinder.c b/colorchord2/notefinder.c index 0745e3e..f0e1178 100644 --- a/colorchord2/notefinder.c +++ b/colorchord2/notefinder.c @@ -288,7 +288,6 @@ void RunNoteFinder( struct NoteFinder * nf, const float * audio_stream, int head nf->note_founds[i] = 1; nf->note_positions[i] = avgloop( nf->note_positions[i], (1.-nf->note_attach_freq_iir), nf->dists[j].mean, nf->note_attach_freq_iir, nf->freqbins); - //I guess you can't IIR this like normal. ////note_positions[i] * (1.-note_attach_freq_iir) + dists[j].mean * note_attach_freq_iir; diff --git a/colorchord2/sound_win.c b/colorchord2/sound_win.c index 559b87f..da41efc 100644 --- a/colorchord2/sound_win.c +++ b/colorchord2/sound_win.c @@ -7,8 +7,9 @@ #include #include #include +#include -#if defined(WIN32) +#if defined(WIN32) && !defined( TCC ) #pragma comment(lib,"winmm.lib") #endif @@ -133,11 +134,14 @@ static struct SoundDriverWin * InitWinSound( struct SoundDriverWin * r ) printf( "Wave Devs: %d; WAVE_MAPPER: %d; Selected Input: %d\n", waveInGetNumDevs(), WAVE_MAPPER, dwdevice ); - printf( "waveInOpen: %p, %p\n", &r->hMyWave, &wfmt ); + printf( "waveInOpen: %p, %p\n", r->hMyWave, &wfmt ); - int p = waveInOpen(&r->hMyWave, dwdevice, &wfmt,(DWORD)(void*)(&HANDLEMIC) , 0, CALLBACK_FUNCTION); - - printf( "WIO: %d\n", p ); + int p = waveInOpen(&r->hMyWave, dwdevice, &wfmt, (void*)(&HANDLEMIC) , 0, CALLBACK_FUNCTION); + + if( p ) + { + fprintf( stderr, "Error performing waveInOpen. Received code: %d\n", p ); + } for ( i=0;iWavBuff[i]).dwBufferLength = r->buffer*2*r->channelsRec; (r->WavBuff[i]).dwLoops = 1; (r->WavBuff[i]).lpData=(char*) malloc(r->buffer*r->channelsRec*2); - waveInPrepareHeader(r->hMyWave,&(r->WavBuff[i]),sizeof(WAVEHDR)); + p = waveInPrepareHeader(r->hMyWave,&(r->WavBuff[i]),sizeof(WAVEHDR)); + printf( "WIP: %d\n", p ); waveInAddBuffer(r->hMyWave,&(r->WavBuff[i]),sizeof(WAVEHDR)); + printf( "WIA: %d\n", p ); } - +\ p = waveInStart(r->hMyWave); - - printf( "WIS: %d\n", p ); + if( p ) + { + fprintf( stderr, "Error performing waveInStart. Received code %d\n", p ); + } return r; } diff --git a/colorchord2/windows/compile.bat b/colorchord2/windows/compile.bat index 32f1031..228feb9 100644 --- a/colorchord2/windows/compile.bat +++ b/colorchord2/windows/compile.bat @@ -1,8 +1,11 @@ @echo off -echo Unzip https://download.savannah.gnu.org/releases/tinycc/tcc-0.9.26-win64-bin.zip to C:\tcc +echo Unzip http://download.savannah.gnu.org/releases/tinycc/tcc-0.9.27-win64-bin.zip to C:\tcc +echo Don't worry. It includes the i386 compiler in the win64 build. 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 LDFLAGS=-lkernel32 -lgdi32 -luser32 -lsetupapi -ldbghelp -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 +set ARCH_SPECIFIC=-L32 C:\windows\system32\winmm.dll +set CC=C:\tcc\i386-win32-tcc.exe +rem set CC=C:\tcc\x86_64-win32-tcc.exe @echo on -C:\tcc\tcc %CFLAGS% %ARCH_SPECIFIC% %SOURCES% %LDFLAGS% -o ..\colorchord.exe \ No newline at end of file +%CC% %CFLAGS% %ARCH_SPECIFIC% %SOURCES% %LDFLAGS% -o ..\colorchord.exe \ No newline at end of file diff --git a/colorchord2/windows/run.bat b/colorchord2/windows/run.bat new file mode 100644 index 0000000..5f88c87 --- /dev/null +++ b/colorchord2/windows/run.bat @@ -0,0 +1,3 @@ +cd .. +colorchord +cd windows diff --git a/colorchord2/windows/tcc_stubs.c b/colorchord2/windows/tcc_stubs.c index c6dfc76..04dc4e1 100644 --- a/colorchord2/windows/tcc_stubs.c +++ b/colorchord2/windows/tcc_stubs.c @@ -1,7 +1,12 @@ - +#include #include <_mingw.h> +#include +#include "symbol_enumerator.h" -#define REMATH(x) double __cdecl x( double f ); float x##f(float v) { return x(v); } +_CRTIMP int __cdecl _vscprintf(const char *_Format,va_list _ArgList); + +#define REMATH(x) double __cdecl x( double f ); float x##f(float v) { return x(v); } +#define REMATH2(x) double __cdecl x( double f, double g ); float x##f(float v, float w) { return x(v,w); } int SymnumCheck( const char * path, const char * name, void * location, long size ) { @@ -27,8 +32,8 @@ REMATH( sin ); REMATH( sqrt ); REMATH( asin ); REMATH( exp ); -REMATH( fmod ); -REMATH( pow ); +REMATH2( fmod ); +REMATH2( pow ); double __cdecl strtod (const char* str, char** endptr); float strtof( const char* str, char** endptr)