void R_TrapInit( void ) { //==================== int enable_excpt; enable_excpt = __EnableF77RTExceptionHandling(); if( enable_excpt ) { signal( SIGSEGV, AbnormalTerm ); signal( SIGILL, AbnormalTerm ); } #if !defined( __WINDOWS__ ) signal( SIGINT, BreakSignal ); #endif #if defined( __DOS__ ) if( __NonIBM ) { // Assume NEC BreakVector = 0x06; } CBSave = _dos_getvect( BreakVector ); _dos_setvect( BreakVector, BreakHandler ); #if defined( __386__ ) if( _IsPharLap() ) { CBRealSave = _dos_getrealvect( BreakVector ); _dos_setvectp( BreakVector, BreakHandler ); } #endif ISave = _dos_getvect( IntOverFlow ); _dos_setvect( IntOverFlow, IOvFlHandler ); ZSave = _dos_getvect( IntDivBy0 ); _dos_setvect( IntDivBy0, IDivZHandler ); #elif defined( __WINDOWS__ ) #if !defined( __386__ ) ISave = _dos_getvect( IntOverFlow ); _dos_setvect( IntOverFlow, IOvFlHandler ); ZSave = _dos_getvect( IntDivBy0 ); _dos_setvect( IntDivBy0, IDivZHandler ); #endif #elif defined( __OS2_386__ ) || defined( __NT__ ) signal( SIGBREAK, BreakSignal ); if( enable_excpt ) { signal( SIGIDIVZ, IDivZSignal ); signal( SIGIOVFL, IOvFlSignal ); } #elif defined( __OS2_286__ ) signal( SIGBREAK, BreakSignal ); DosSetVec( IntOverFlow, (PFN)IOvFlHandler, (PFN FAR *)&ISave ); DosSetVec( IntDivBy0, (PFN)IDivZHandler, (PFN FAR *)&ZSave ); #endif FPTrapInit(); }
void FPTrapInit( void ) { //==================== #ifndef __NETWARE__ /* FP Exceptions can't be trapped under Netware */ if( __EnableF77RTExceptionHandling() ) { signal( SIGFPE, (void (*)(int))&FPEHandler ); #if defined( _M_IX86 ) } else { // we still want to enable the floating point exceptions (just like // signal() does for SIGFPE _control87( 0, ( MCW_EM & ~EM_PRECISION ) | 0x80 ); #endif } __MaskDefaultFPE(); #endif }