caasi@sdsu.UUCP (Richard Caasi) (07/22/88)
Here is the Turbo Pascal 3.0 source code for mouse input. I haven't tried it under TP4.0 (of course the registers type declaration would no longer be necessary). {$I DISCLAIMER.STD} ================== CUT HERE ===================================== { Functions and subroutines for use with the PC Mouse. } Type registers = record ax,bx,cx,dx,bp,si,di,ds,es,Flags : integer; end; Var MouseR : registers; m1, m2, m3, m4 : integer; mouse : boolean; function MsMouse : boolean; var mseg, m : integer; Begin mseg := 256 * mem[$0000:0207] + mem[$0000:0206]; m := 256 * mem[$0000:0205] + mem[$0000:0206]; if (mseg <> 0) and (m <> 2) then Msmouse := true else msmouse := false; end; { MsMouse } Procedure Reset_mouse; { resets mouse internal variables } begin Mouser.ax := 0; intr ($33, mouser); end; Procedure Show_mouse; { displays the mouse cursor on the screen } begin Mouser.ax := 1; intr ($33, mouser); end; Procedure Hide_mouse; { Hides the mouse cursor on the screen } begin Mouser.ax := 2; intr ($33, mouser); end; Procedure Get_mouse_status (Var m2, m3, m4 : integer); begin Mouser.ax := 3; intr ($33, mouser); m2 := mouser.bx; m3 := mouser.cx; m4 := mouser.dx; end; Procedure Put_mouse ( x, y : integer); begin mouser.ax := 4; mouser.cx := x; mouser.dx := y; intr ($33, mouser); end; Procedure Get_mouse_button_pressed (Var m1, m2, m3, m4 : integer); begin mouser.ax := 5; mouser.bx := m2; intr ($33, mouser); m1 := mouser.ax; m2 := mouser.bx; m3 := mouser.cx; m4 := mouser.dx; end; Procedure Get_mouse_button_released (Var m1, m2, m3, m4 : integer); begin mouser.ax := 6; mouser.bx := m2; intr ($33, mouser); m1 := mouser.ax; m2 := mouser.bx; m3 := mouser.cx; m4 := mouser.dx; end; Procedure Set_mouse_X_range (Min, Max : integer); begin mouser.ax := 7; mouser.cx := min; mouser.dx := max; intr ($33, mouser); end; Procedure Set_mouse_Y_range (Min, Max : integer); begin mouser.ax := 8; mouser.cx := min; mouser.dx := max; intr ($33, mouser); end; Procedure Set_Graphics_Icon (Var xspot, yspot, icon_pointer : integer); begin mouser.ax := 9; mouser.bx := xspot; mouser.cx := yspot; mouser.dx := icon_pointer; intr ($33, mouser); end; Procedure Set_text_cursor (cursor_type, start, stop : integer); begin mouser.ax := 10; mouser.bx := cursor_type; mouser.cx := start; mouser.dx := stop; intr ($33, mouser); end; Procedure Mouse_motion (Var xcounter, ycounter : integer); begin mouser.ax := 11; intr ($33, mouser); xcounter := mouser.cx; ycounter := mouser.dx; end; Procedure mouse_mickeys (x, y : integer); begin mouser.ax := 15; mouser.cx := x; mouser.dx := y; intr ($33, mouser); end; Procedure mouse_DST (mickeys : integer); begin mouser.ax := 19; mouser.dx := mickeys; intr ($33, mouser); end;