int __stdcall WriteLog( const TCHAR *msg, const int error, const TCHAR *location ) { static TCHAR log_path[MAX_PATH] = { }; static bool first_call = FirstCall( log_file ); std::wofstream log; TCHAR date[9]; TCHAR time[9]; LPTSTR err_buf; if( !*log_path ) { if( !GetModuleFileName( 0, log_path, MAX_PATH ) ) return -1; wcscpy( wcsrchr( log_path, L'.' ) + 1, L"log" ); } log.open( log_path, std::ios::app ); if( log.fail( ) ) return -1; log.imbue( std::locale( "rus_rus" ) ); if( first_call ) { first_call = false; _wstrdate( date ); if( log.rdbuf( )->pubseekoff( 0, std::ios_base::end ) > 0 ) log << std :: endl; log << date << tab << L"log started" << std::endl; } _wstrtime( time ); log << time << tab; if( error == 0 ) { log << msg; } else { if( !FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_MAX_WIDTH_MASK, 0, error, MAKELANGID( LANG_NEUTRAL, SUBLANG_SYS_DEFAULT ), (LPTSTR) &err_buf, 0, 0 ) ) return GetLastError( ); log << L"Error: " << msg << tab << L"(" << error << L") " << err_buf << tab << location; LocalFree( err_buf ); } if( log.fail( ) ) { log.close( ); log.open( log_path, std::ios::app ); } log << std::endl; log.close( ); return 0; }
DFhackCExport int SDL_SemWait(void *sem) { if(!inited) FirstCall(); return _SDL_SemWait(sem); }
DFhackCExport uint32_t SDL_ThreadID(void) { if(!inited) FirstCall(); return _SDL_ThreadID(); }
DFhackCExport uint8_t SDL_GetMouseState(int *x, int *y) { if(!inited) FirstCall(); return _SDL_GetMouseState(x,y); }
DFhackCExport int SDL_InitSubSystem(uint32_t flags) { if(!inited) FirstCall(); return _SDL_InitSubSystem(flags); }
DFhackCExport void SDL_DestroySemaphore(void *sem) { if(!inited) FirstCall(); _SDL_DestroySemaphore(sem); }
DFhackCExport uint8_t SDL_GetAppState(void) { if(!inited) FirstCall(); return _SDL_GetAppState(); }
DFhackCExport vPtr SDL_CreateThread(int (*fn)(void *), void *data) { if(!inited) FirstCall(); return _SDL_CreateThread(fn,data); }
DFhackCExport void SDL_Delay(uint32_t ms) { if(!inited) FirstCall(); _SDL_Delay(ms); }
DFhackCExport void *SDL_CreateSemaphore(uint32_t initial_value) { if(!inited) FirstCall(); return _SDL_CreateSemaphore(initial_value); }
DFhackCExport int SDL_Flip(void * some_ptr) { if(!inited) FirstCall(); return _SDL_Flip(some_ptr); }
DFhackCExport void SDL_GL_SwapBuffers(void) { if(!inited) FirstCall(); _SDL_GL_SwapBuffers(); }
DFhackCExport size_t SDL_strlcat(char *dst, const char *src, size_t maxlen) { if(!inited) FirstCall(); return _SDL_strlcat(dst, src, maxlen); }
DFhackCExport char* SDL_getenv(const char *name) { if(!inited) FirstCall(); return _SDL_getenv(name); }