Exemple #1
0
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);
}