void mouse_got_focus() { if ( !mouse_inited ) return; Mouse_in_focus = true; mouse_flush(); }
void mouse_lost_focus() { if ( !mouse_inited ) return; Mouse_in_focus = false; mouse_flush(); }
//-------------------------------------------------------- // returns 0 if no mouse // else number of buttons int mouse_init(int enable_cyberman) { dpmi_real_regs rr; cyberman_info *ci; struct SREGS sregs; union REGS inregs, outregs; ubyte *Mouse_dos_mem; if (Mouse_installed) return Mouse.num_buttons; if (_dos_getvect(0x33) == NULL) { // No mouse driver loaded return 0; } // Reset the mouse driver memset( &inregs, 0, sizeof(inregs) ); inregs.w.ax = 0; int386(0x33, &inregs, &outregs); if (outregs.w.ax != 0xffff) return 0; Mouse.num_buttons = outregs.w.bx; Mouse.cyberman = 0; // Enable mouse driver memset( &inregs, 0, sizeof(inregs) ); inregs.w.ax = 0x0020; int386(0x33, &inregs, &outregs); if (outregs.w.ax != 0xffff ) return 0; if ( enable_cyberman ) { Mouse_dos_mem = dpmi_get_temp_low_buffer( 64 ); if (Mouse_dos_mem==NULL) { printf( "Unable to allocate DOS buffer in mouse.c\n" ); } else { // Check for Cyberman... memset( &rr, 0, sizeof(dpmi_real_regs) ); rr.es = DPMI_real_segment(Mouse_dos_mem); rr.edx = DPMI_real_offset(Mouse_dos_mem); rr.eax = 0x53c1; dpmi_real_int386x( 0x33, &rr ); if (rr.eax==1) { // SWIFT functions supported ci = (cyberman_info *)Mouse_dos_mem; if (ci->device_type==1) { // Cyberman Mouse.cyberman = 1; //printf( "Cyberman mouse detected\n" ); Mouse.num_buttons = 11; } } } } if (!dpmi_lock_region(&Mouse,sizeof(mouse_info))) { Error( "Unable to lock mouse data region" ); } if (!dpmi_lock_region((void near *)mouse_handler,(char *)mouse_handler_end - (char near *)mouse_handler)) { Error( "Unable to lock mouse handler" ); } // Install mouse handler memset( &inregs, 0, sizeof(inregs)); memset( &sregs, 0, sizeof(sregs)); inregs.w.ax = 0xC; inregs.w.cx = ME_LB_P|ME_LB_R|ME_RB_P|ME_RB_R|ME_MB_P|ME_MB_R; // watch all 3 button ups/downs if (Mouse.cyberman) inregs.w.cx |= ME_Z_C| ME_P_C| ME_B_C| ME_H_C; // if using a cyberman, also watch z, pitch, bank, heading. inregs.x.edx = FP_OFF(mouse_handler); sregs.es = FP_SEG(mouse_handler); int386x(0x33, &inregs, &outregs, &sregs); Mouse_installed = 1; atexit( mouse_close ); mouse_flush(); return Mouse.num_buttons; }