unsigned_32 MyGetRMVector( unsigned vect ) { void __far *p; p = DPMIGetRealModeInterruptVector( vect ); return( (FP_SEG( p ) << 16) + (FP_OFF( p ) & 0xffff) ); }
void __grab_int_ctrl_break( void ) { if( __old_int_ctrl_break == 0 ) { #if defined(__WINDOWS_386__) __old_int_ctrl_break = _dos_getvect( CTRL_BRK_VEC ); TinySetVect( CTRL_BRK_VEC, (void (_WCNEAR *)(void))__int_ctrl_break_handler ); #elif defined( __386__ ) if( _IsPharLap() ) { __old_int_ctrl_break = pharlap_rm_getvect( CTRL_BRK_VEC ); __old_pm_int_ctrl_break = pharlap_pm_getvect( CTRL_BRK_VEC ); pharlap_setvect( CTRL_BRK_VEC, (pfun) (void (_WCNEAR *)(void))__int_ctrl_break_handler ); } else if( __DPMI_hosted() == 1 ) { DPMILockLinearRegion((long)__int_ctrl_break_handler, ((long)__restore_int23 - (long)__int_ctrl_break_handler)); __old_int_ctrl_break = DPMIGetRealModeInterruptVector( CTRL_BRK_VEC ); __old_pm_int_ctrl_break = DPMIGetPMInterruptVector( CTRL_BRK_VEC ); DPMISetPMInterruptVector( CTRL_BRK_VEC, __int_ctrl_break_handler ); } else { /* what it used to do */ __old_int_ctrl_break = _dos_getvect( CTRL_BRK_VEC ); _dos_setvect( CTRL_BRK_VEC, __int_ctrl_break_handler ); } #else __old_int_ctrl_break = _dos_getvect( CTRL_BRK_VEC ); _dos_setvect( CTRL_BRK_VEC, __int_ctrl_break_handler ); #endif if( __int23_exit == __null_int23_exit ) { __int23_exit = __restore_int_ctrl_break; } else if( __int23_exit == __restore_int23 ) { __int23_exit = __restore_int; } } }