BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD ul_reason_for_call, LPVOID lpvReserved) #endif { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { _clear87 (); _control87 ( _PC_53, MCW_PC ); _control87 ( _RC_CHOP, MCW_RC ); _control87 ( _RC_NEAR, MCW_RC ); _control87 ( _MCW_EM, MCW_EM ); } //. LogFile.reserve (256); break; case DLL_THREAD_ATTACH: CoInitializeEx (NULL, COINIT_MULTITHREADED); timeBeginPeriod (1); break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: #ifdef USE_MEMORY_MONITOR memory_monitor::flush_each_time (true); #endif // USE_MEMORY_MONITOR break; } return TRUE; }
void initialize () { _clear87 (); _control87 ( _PC_24, MCW_PC ); _control87 ( _RC_CHOP, MCW_RC ); _24 = getFPUsw(); // 24, chop _control87 ( _RC_NEAR, MCW_RC ); _24r = getFPUsw(); // 24, rounding _control87 ( _PC_53, MCW_PC ); _control87 ( _RC_CHOP, MCW_RC ); _53 = getFPUsw(); // 53, chop _control87 ( _RC_NEAR, MCW_RC ); _53r = getFPUsw(); // 53, rounding _control87 ( _PC_64, MCW_PC ); _control87 ( _RC_CHOP, MCW_RC ); _64 = getFPUsw(); // 64, chop _control87 ( _RC_NEAR, MCW_RC ); _64r = getFPUsw(); // 64, rounding #ifndef XRCORE_STATIC m24r (); #endif //XRCORE_STATIC ::Random.seed ( u32(CPU::GetCLK()%(1i64<<32i64)) ); }
int InitGL(GLvoid) // All Setup For OpenGL Goes Here { _clear87(); _control87(MCW_EM, MCW_EM); glewInit(); // hunter-271211: przeniesione // AllocConsole(); // SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN); // ShaXbee-121209: Wlaczenie obslugi tablic wierzcholkow glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); Global::pWorld = &World; // Ra: wskaŸnik potrzebny do usuwania pojazdów return World.Init(hWnd, hDC); // true jeœli wszystko pójdzie dobrze }
extern long __stdcall MyUnhandledExceptionFilter( struct _EXCEPTION_POINTERS *ExceptionInfo ) { // return EXCEPTION_EXECUTE_HANDLER ; // terminates the app switch(ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_FLT_DENORMAL_OPERAND: case EXCEPTION_FLT_DIVIDE_BY_ZERO: case EXCEPTION_FLT_INEXACT_RESULT: case EXCEPTION_FLT_INVALID_OPERATION: case EXCEPTION_FLT_OVERFLOW: case EXCEPTION_FLT_STACK_CHECK: case EXCEPTION_FLT_UNDERFLOW: _clear87(); return EXCEPTION_CONTINUE_EXECUTION ; // retry default: return EXCEPTION_CONTINUE_SEARCH ; // standard fatal dialog box } }
void FmtFloat( UINT mid,char *cp, ULONG UserAddr, UINT sfx , USHORT typeno ) { UINT read; UINT size; signed long *dp; size = QtypeSize(mid,typeno); dp = (signed long *)GetAppData( UserAddr, size, &read, sfx); if( !dp || (size != read) ) {sprintf(cp,"Invalid Address");return;} /****************************************************************************/ /* Mask all the floating point exceptions while we execute the sprintf. */ /* The debugger may trap if we don't do this. */ /* */ /****************************************************************************/ _control87(0x37f,0xffff); switch(typeno) { case TYPE_FLOAT: sprintf(cp,"%.10g",*(float*)dp); break; case TYPE_DOUBLE: sprintf(cp,"%.18g",*(double*)dp); break; case TYPE_LDOUBLE: sprintf(cp,"%.21Lg",*(long double*)dp); break; } /****************************************************************************/ /* - Clear any exceptions that may have occurred. */ /* - Reset the control word to the default value. */ /****************************************************************************/ _clear87(); _control87(CW_DEFAULT,0xffff); }
void xrCore::_initialize (LPCSTR _ApplicationName, LogCallback cb, BOOL init_fs, LPCSTR fs_fname) { strcpy_s (ApplicationName,_ApplicationName); if (0==init_counter) { #ifdef XRCORE_STATIC _clear87 (); _control87 ( _PC_53, MCW_PC ); _control87 ( _RC_CHOP, MCW_RC ); _control87 ( _RC_NEAR, MCW_RC ); _control87 ( _MCW_EM, MCW_EM ); #endif // Init COM so we can use CoCreateInstance // HRESULT co_res = CoInitializeEx (NULL, COINIT_MULTITHREADED); strcpy_s (Params,sizeof(Params),GetCommandLine()); _strlwr_s (Params,sizeof(Params)); string_path fn,dr,di; // application path GetModuleFileName(GetModuleHandle(MODULE_NAME),fn,sizeof(fn)); _splitpath (fn,dr,di,0,0); strconcat (sizeof(ApplicationPath),ApplicationPath,dr,di); #ifndef _EDITOR strcpy_s (g_application_path,sizeof(g_application_path),ApplicationPath); #endif // working path if( strstr(Params,"-wf") ) { string_path c_name; sscanf (strstr(Core.Params,"-wf ")+4,"%[^ ] ",c_name); SetCurrentDirectory (c_name); } GetCurrentDirectory(sizeof(WorkingPath),WorkingPath); // User/Comp Name DWORD sz_user = sizeof(UserName); GetUserName (UserName,&sz_user); DWORD sz_comp = sizeof(CompName); GetComputerName (CompName,&sz_comp); // Mathematics & PSI detection CPU::Detect (); Memory._initialize (strstr(Params,"-mem_debug") ? TRUE : FALSE); DUMP_PHASE; InitLog (); _initialize_cpu (); #ifdef DEBUG #ifndef DEDICATED_SERVER Debug._initialize (FALSE); #else Debug._initialize (TRUE); #endif #endif rtc_initialize (); xr_FS = xr_new<CLocatorAPI> (); xr_EFS = xr_new<EFS_Utils> (); //. R_ASSERT (co_res==S_OK); } if (init_fs){ u32 flags = 0; if (0!=strstr(Params,"-build")) flags |= CLocatorAPI::flBuildCopy; if (0!=strstr(Params,"-ebuild")) flags |= CLocatorAPI::flBuildCopy|CLocatorAPI::flEBuildCopy; #ifdef DEBUG if (strstr(Params,"-cache")) flags |= CLocatorAPI::flCacheFiles; else flags &= ~CLocatorAPI::flCacheFiles; #endif // DEBUG #ifdef _EDITOR // for EDITORS - no cache flags &=~ CLocatorAPI::flCacheFiles; #endif // _EDITOR flags |= CLocatorAPI::flScanAppRoot; #ifndef _EDITOR #ifndef ELocatorAPIH if (0!=strstr(Params,"-file_activity")) flags |= CLocatorAPI::flDumpFileActivity; #endif #endif FS._initialize (flags,0,fs_fname); Msg ("'%s' build %d, %s\n","xrCore",build_id, build_date); EFS._initialize (); #ifdef DEBUG #ifndef _EDITOR Msg ("CRT heap 0x%08x",_get_heap_handle()); Msg ("Process heap 0x%08x",GetProcessHeap()); #endif #endif // DEBUG } SetLogCB (cb); LPAPI_VERSION ver = ImagehlpApiVersion(); if ( NULL == GetProcAddress ( GetModuleHandle("dbghelp.dll"), "EnumerateLoadedModulesEx") ) { string256 msg; DWORD dwVer[2]; WORD *v4 = (WORD*) &dwVer; CSymbolEngine SE; SE.GetInMemoryFileVersion("dbghelp.dll", dwVer[0], dwVer[1]); sprintf_s(msg, 256, "”старевший файл dbghelp.dll (%d.%d.%d.%d), его рекомендуетс¤ удалить.", v4[1], v4[0], v4[3], v4[2]); MessageBox(NULL, msg, "DebugHlp Warning", MB_OK); } init_counter++; }
void test_fp_and_80x87_math( void ) { double dnum; int inum; #ifdef __FPI__ unsigned fp_status, fp_control, fp_mask, origbits, bits; #endif printf( "Testing other floating point " ); #ifdef __FPI__ printf( "and 80x87 specific " ); #endif printf( "functions...\n" ); VERIFY( CompDbl( j0( 2.387 ), 0.009288 ) ); VERIFY( CompDbl( j1( 2.387 ), 0.522941 ) ); VERIFY( CompDbl( jn( 2, 2.387 ), 0.428870 ) ); VERIFY( CompDbl( y0( 2.387 ), 0.511681 ) ); VERIFY( CompDbl( y1( 2.387 ), 0.094374 ) ); VERIFY( CompDbl( yn( 2, 2.387 ), -0.432608 ) ); VERIFY( ceil( 1.0001 ) == 2.0 ); VERIFY( ceil( -1.0001 ) == -1.0 ); VERIFY( floor( 1.0001 ) == 1.0 ); VERIFY( floor( -1.0001 ) == -2.0 ); VERIFY( CompDbl( exp( 1.0 ), E ) ); VERIFY( CompDbl( exp( 3.0 ), E * E * E ) ); VERIFY( exp( 0.0 ) == 1.0 ); VERIFY( fabs( -1.5 ) == 1.5 ); VERIFY( fabs( 2.5 ) == 2.5 ); VERIFY( fabs( 0.0 ) == 0.0 ); VERIFY( fmod( 2.5, 0.5 ) == 0.0 ); VERIFY( fmod( 4.5, 2.0 ) == 0.5 ); VERIFY( fmod( -4.5, 2.0 ) == -0.5 ); VERIFY( fmod( -7.5, -2.0 ) == -1.5 ); dnum = frexp( 65535.0, &inum ); VERIFY( inum == 16 ); VERIFY( CompDbl( ldexp( dnum, inum ), 65535.0 ) ); while( inum-- > 0 ) dnum *= 2; VERIFY( CompDbl( dnum, 65535.0 ) ); VERIFY( CompDbl( log( E ), 1.0 ) ); VERIFY( CompDbl( log( 1.0 ), 0.0 ) ); VERIFY( CompDbl( log( 1.0 / E ), -1.0 ) ); VERIFY( CompDbl( log10( 10.0 ), 1.0 ) ); VERIFY( CompDbl( log10( 1 ), 0.0 ) ); VERIFY( CompDbl( log10( 0.1 ), -1.0 ) ); #ifdef __WATCOMC__ /* Not in Microsoft libs. */ VERIFY( CompDbl( log2( 65536.0 ), 16.0 ) ); VERIFY( CompDbl( log2( 1 ), 0.0 ) ); VERIFY( CompDbl( log2( 0.25 ), -2.0 ) ); #endif VERIFY( CompDbl( sqrt( 99980001.0 ), 9999.0 ) ); dnum = 1.0/DBL_MIN; VERIFY( CompDbl( 1.0 / dnum, DBL_MIN ) ); VERIFY( CompDbl( modf( PI, &dnum ), PI - 3.0 ) ); VERIFY( dnum == 3.0 ); VERIFY( CompDbl( modf( -PI, &dnum ) , - PI + 3.0 ) ); VERIFY( dnum == -3.0 ); VERIFY( pow( 1.0, 123456789.0 ) == 1.0 ); VERIFY( pow( 2.0, 16.0 ) == 65536.0 ); VERIFY( CompDbl( pow( E, log(1234.0) ), 1234.0 ) ); #ifdef __FPI__ VERIFY( sqrt( -1 ) == 1 ); // Now my_matherrno should == DOMAIN after calling sqrt( -1 ) // If not, matherr() fails VERIFY( my_matherrno == DOMAIN ); my_matherrno = 0; // reset VERIFY( sqrt( 0 ) == 0 ); VERIFY( my_matherrno == 0 ); _fpreset(); fp_status = _clear87(); VERIFY( fp_status == 0 ); // fp_status = _status87(); VERIFY( fp_status == 0 ); // _fpreset(); fp_control = _control87( 0, 0 ); bits = fp_control & MCW_IC; bits = (bits == IC_AFFINE) ? IC_PROJECTIVE : IC_AFFINE; fp_control = _control87( bits, MCW_IC ); VERIFY( (fp_control & MCW_IC) == bits ); bits = (bits == IC_AFFINE) ? IC_PROJECTIVE : IC_AFFINE; fp_control = _control87( bits, MCW_IC ); VERIFY( (fp_control & MCW_IC) == bits ); // fp_control = _control87( 0, 0 ); origbits = fp_control & MCW_RC; bits = (origbits == RC_NEAR) ? RC_CHOP : RC_NEAR; fp_control = _control87( bits, MCW_RC ); VERIFY( (fp_control & MCW_RC) == bits ); fp_control = _control87( origbits, MCW_RC ); VERIFY( (fp_control & MCW_RC) == origbits ); // _fpreset(); fp_control = 0; fp_mask = _EM_INEXACT; signal( SIGFPE, (void (*)(int))my_handler ); (void)_control87( fp_control, fp_mask ); q = a / b; VERIFY( sig_count > 0 ); fp_control = _EM_INEXACT; (void)_control87( fp_control, fp_mask ); sig_count = 0; q = a / b; VERIFY( sig_count == 0 ); signal( SIGFPE, SIG_DFL ); #endif }
void clearFE() { _clear87(); }