home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Shareware - Software Farm 2
/
wosw_2.zip
/
wosw_2
/
QBAS
/
WNDTOOL5.ZIP
/
MOUSE.ASM
< prev
next >
Wrap
Assembly Source File
|
1989-06-29
|
23KB
|
716 lines
;TITLE: MOUSE.ASM
MOUSE EQU 33H
CURSOR_ON EQU 0001
CURSOR_OFF EQU 0002
FALSE EQU 0
TRUE EQU NOT FALSE
PRESSED EQU TRUE
NOT_PRESSED EQU FALSE
BASIC_SETUP MACRO
PUSH BP
MOV BP,SP
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH DS
PUSH ES
ENDM
BASIC_CLEANUP MACRO
CLD
POP ES
POP DS
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
POP BP
ENDM
;
;CODE SEGMENT BYTE PUBLIC ;CODE;
; ASSUME CS:CODE
DOSSEG ;requires MASM 5.0 or higher
.MODEL medium
; Define all publicly accessible routines.
PUBLIC MMCHECK
PUBLIC MMCURSORON
PUBLIC MMCURSOROFF
PUBLIC MMCLICK
PUBLIC MMButtonPress
PUBLIC MMButtonRelease
PUBLIC MMBUTTON
PUBLIC MMGETLOC
PUBLIC MMGETLOCINFO
PUBLIC MMSETLOC
PUBLIC MMSETRANGE
.CODE
;
;
;******************************************************************************
;* THIS CALL MUST BE MADE BEFORE ANY OTHER MOUSE CALLS WILL FUNCTION *
;******************************************************************************
;
; BASIC: CALL MMCHECK(MOUSE%)
;
; FUNCTION=0
;
; CHECK FOR AN INSTALLED MOUSE, RESET THE MOUSE, INITIALIZE ALL MOTION
; COUNTERS AND SET MOUSE TO CENTER POSITION.
;
; ENTRY PARAMETERS:
; AH=0 (INITIALIZE/RESET MOUSE)
;
; EXIT PARAMETERS :
;
; AX = 0 IF NO MOUSE INSTALLED
; BX = NUMBER OF BUTTONS ON THE MOUSE
;
;
MMCHECK PROC FAR
BASIC_SETUP
XOR AX,AX ;POINT TO MEMORY SEGMENT 0
MOV ES,AX
XOR BX,BX
MOV SI,MOUSE*4h ;CALCULATE MOUSE INTERRUPT OFFSET
CMP AX,ES:[SI+2] ;HAS A MOUSE HANDLER BEEN INSTALLED
JNZ _MOUSE_INITIALIZE
CMP AX,ES:[SI]
JZ _MOUSE_NOT_FOUND ;SEGMENT:OFFSET WAS ALL ZEROS (NO MOUSE DRIVER)
_MOUSE_INITIALIZE:
INT MOUSE
OR AX,AX ;WAS A MOUSE FOUND?
JNZ _MOUSE_FOUND ;yes!
_MOUSE_NOT_FOUND:
MOV BX,0 ;INDICATE MOUSE NOT FOUND
_MOUSE_FOUND:
MOV SI,[BP+6] ;RETURN THE NUMBER OF MOUSE BUTTONS
MOV [SI],BX
MOV CS:_MOUSE,BX ;SAVE THE NUMBER OF MOUSE BUTTONS FOUND
BASIC_CLEANUP
MMCHECK_EXIT:
RET 2d
MMCHECK ENDP
;
;
;
; BASIC: CALL MMCURSORON
;
; FUNCTION=1
;
; IF THE CURSOR IS OFF,THE CURSOR WILL STILL FOLLOW THE MOUSES
; MOVEMENTS, BUT THE CURSOR WILL NOT BE SEEN UNTIL TURNED ON.
;
; ENTRY PARAMETERS:
;
; AH=1 (TURN MOUSE CURSOR ON)
;
; EXIT PARAMETERS :
;
;
MMCURSORON PROC FAR
CMP CS:_MOUSE,0 ;IS A MOUSE INSTALLED AND INITIALIZED
JZ MMCURSORON_EXIT ;NO
BASIC_SETUP
MOV AX,CURSOR_ON
MOV AX,0001H
INT MOUSE
BASIC_CLEANUP
MMCURSORON_EXIT:
RET
MMCURSORON ENDP
;
;
; BASIC: CALL MMCURSOROFF
;
; FUNCTION=2
;
; HIDE THE DISPLAY CURSOR. THE CURSOR WILL STILL FOLLOW THE MOUSES
; MOVEMENTS, BUT THE CURSOR WILL NOT BE SEEN.
;
; ENTRY PARAMETERS:
;
; AH=2 (TURN MOUSE CURSOR OFF)
;
; EXIT PARAMETERS :
;
;
;
MMCURSOROFF PROC FAR
CMP CS:_MOUSE,0 ;IS A MOUSE INSTALLED AND INITIALIZED
JZ MMCURSOROFF_EXIT ;NO
BASIC_SETUP
MOV AX,CURSOR_OFF
MOV AX,0002H
INT MOUSE
BASIC_CLEANUP
MMCURSOROFF_EXIT:
RET
MMCURSOROFF ENDP
;
;
; BASIC: CALL MMGETLOC(COL%,ROW%)
;
; FUNCTION=3
;
; ENTRY PARAMETERS:
;
; AH=3 (GET CURRENT MOUSE CURSOR LOCATION)
;
; EXIT PARAMETERS :
;
; BX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
; CX = X COORDINATE
; DX = Y COORDINATE
;
;
; NOTE: THE 'X' CO-ORDINATE IS A VALUE FROM 0-639 (COLUMN) AND THE
; 'Y' CO-ORDINATE (ROW) IS A VALUE FROM 0-199. TO 'NORMALIZE'
; THE CO-ORDINATE VALUES FOR A 80X25 TEXT SCREEN, DIVIDE EACH
; VALUE BY 8. IF YOU ARE IN LOW RES GRAPHICS , DIVIDE BY 2.
; IF YOU ARE IN HIGH RES GRAPHICS , THE VALUES ARE FINE.
;
; NOTE: THE BUTTON STATUS WORD RETURNS THE PRESSED STATUS FOR ALL
; BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
; (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
; IF A BIT IS SET (1) THEN ITS ASSOCIATED BUTTON IS CURRENTLY
; PRESSED DOWN.
;
;
MMGETLOC PROC FAR
CMP CS:_MOUSE,0 ;IS A MOUSE INSTALLED AND INITIALIZED
JZ MMGETLOC_EXIT ;NO
BASIC_SETUP
MOV AX,0003H
INT MOUSE
MOV SI,[BP+8] ;RETURN THE 'X' CO-ORDINATE (COLUMN)
MOV [SI],CX
MOV SI,[BP+6] ;RETURN THE 'Y' COORDINATE (ROW)
MOV [SI],DX
BASIC_CLEANUP
MMGETLOC_EXIT:
RET 4d
MMGETLOC ENDP
;
;
; BASIC: CALL MMGETLOCINFO(BUTTONS%,COL%,ROW%)
;
; FUNCTION=3
;
; ENTRY PARAMETERS:
;
; AH=3 (GET CURRENT MOUSE CURSOR LOCATION)
;
; EXIT PARAMETERS :
;
; BX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
; CX = X COORDINATE
; DX = Y COORDINATE
;
;
; NOTE: THE 'X' CO-ORDINATE IS A VALUE FROM 0-639 (COLUMN) AND THE
; 'Y' CO-ORDINATE (ROW) IS A VALUE FROM 0-199. TO 'NORMALIZE'
; THE CO-ORDINATE VALUES FOR A 80X25 TEXT SCREEN, DIVIDE EACH
; VALUE BY 8. IF YOU ARE IN LOW RES GRAPHICS , DIVIDE BY 2.
; IF YOU ARE IN HIGH RES GRAPHICS , THE VALUES ARE FINE.
;
; NOTE: THE BUTTON STATUS WORD RETURNS THE PRESSED STATUS FOR ALL
; BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
; (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
; IF A BIT IS SET (1) THEN ITS ASSOCIATED BUTTON IS CURRENTLY
; PRESSED DOWN.
;
;
MMGETLOCINFO PROC FAR
CMP CS:_MOUSE,0 ;IS A MOUSE INSTALLED AND INITIALIZED
JZ MMGETLOCINFO_EXIT ;NO
BASIC_SETUP
MOV AX,0003H
INT MOUSE
MOV SI,[BP+0AH] ;RETURN THE BUTTONS PRESSED STATUS
MOV [SI],BX
MOV SI,[BP+08H] ;RETURN THE 'X' CO-ORDINATE (COLUMN)
MOV [SI],CX
MOV SI,[BP+6H] ;RETURN THE 'Y' COORDINATE (ROW)
MOV [SI],DX
BASIC_CLEANUP
MMGETLOCINFO_EXIT:
RET 6d
MMGETLOCINFO ENDP
;
;
;
; BASIC: CALL MMSETLOC(COL%,ROW%)
;
; FUNCTION=4
;
; ENTRY PARAMETERS:
;
; AH=4 (SET CURRENT MOUSE CURSOR LOCATION)
; CX = X COORDINATE
; DX = Y COORDINATE
;
; EXIT PARAMETERS :
;
; BX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
; CX = X COORDINATE
; DX = Y COORDINATE
;
;
; NOTE: THE 'X' CO-ORDINATE IS A VALUE FROM 0-639 (COLUMN) AND THE
; 'Y' CO-ORDINATE (ROW) IS A VALUE FROM 0-199. TO 'NORMALIZE'
; THE CO-ORDINATE VALUES FOR A 80X25 TEXT SCREEN, DIVIDE EACH
; VALUE BY 8. IF YOU ARE IN LOW RES GRAPHICS , DIVIDE BY 2.
; IF YOU ARE IN HIGH RES GRAPHICS , THE VALUES ARE FINE.
;
; NOTE: THE BUTTON STATUS WORD RETURNS THE PRESSED STATUS FOR ALL
; BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
; (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
; IF A BIT IS SET (1) THEN ITS ASSOCIATED BUTTON IS CURRENTLY
; PRESSED DOWN.
;
MMSETLOC PROC FAR
CMP CS:_MOUSE,0 ;IS A MOUSE INSTALLED AND INITIALIZED
JZ MMSETLOC_EXIT ;NO
BASIC_SETUP
MOV SI,[BP+8] ;GET THE 'X' CO-ORDINATE (COLUMN) TO SET
MOV CX,[SI]
MOV SI,[BP+6] ;GET THE 'Y' CO-ORDINATE (ROW) TO SET
MOV DX,[SI]
MOV AX,0004H
INT MOUSE
BASIC_CLEANUP
MMSETLOC_EXIT:
RET 4d
MMSETLOC ENDP
;
;
; BASIC: CALL MMCLICK(LEFT.BUTTON%,RIGHT.BUTTON%)
;
; FUNCTION=5
;
; ENTRY PARAMETERS:
;
; AH=5 (GET BUTTON PRESS INFO)
; AL=O-? (BUTTON NUMBER TO GET INFO FOR)
;
; EXIT PARAMETERS :
;
; AX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
; BX = NUMBER OF PRESSES FOR THIS BUTTON SINCE LAST CALL
; (0=32768)
; CX = X COORDINATE AT LAST PRESS TIME
; DX = Y COORDINATE AT LAST PRESS TIME
;
; NOTE: THE BUTTON STATUS WORD RETURNS THE PRESS/RELEASE STATUS FOR ALL
; BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
; (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
; IF A BIT IS SET (1) THENS ITS ASSOCIATED BUTTON IS CURRENTLY
; PRESSED DOWN.
;
; FUNCTION 5 DOES NOT DOESN'T DETECT OVERFLOW.
;
; THE PRESS COUNT IS RESET TO ZERO(0) AFTER EACH CALL.
;
; THE VALUES OF THE HORIZONTAL AND VERTICAL COORDINATES ARE IN
; IN THE RANGES DEFINED BY THE VIRTUAL SCREEN. THESE VALUES
; REPRESENT THE CURSOR POSITION WHEN YOU LAST PRESSED THE BUTTON,
; NOT THE CURSOR/S CURRENT POSITION.
;
MMclick PROC FAR
CMP CS:_MOUSE,0 ;IS A MOUSE INSTALLED AND INITIALIZED
JZ MMclick_EXIT ;NO
BASIC_SETUP
MOV BX,0000H ;GET RELEASE INFO FOR BUTTON 1 (LEFT)
MOV AX,0005H
INT MOUSE
MOV SI,[BP+8] ;PASS BACK NUMBER OF RELEASES FOR THIS BUTTON
MOV [SI],BX
MOV BX,0001H ;GET RELEASE INFO FOR BUTTON 2 (RIGHT)
MOV AX,0005H
INT MOUSE
MOV SI,[BP+6] ;PASS BACK NUMBER OF RELEASES FOR THIS BUTTON
MOV [SI],BX
BASIC_CLEANUP
MMclick_EXIT:
RET 4d
MMclick ENDP
;
;
; FUNCTION=5
;
; BASIC: CALL MMButtonPress(MMButton%,_
; MMButton.status%,_
; MMButton.presses%,_
; MMPress.xord%,_
; MMPress.yord%)
; ENTRY PARAMETERS:
;
; AH=5 (GET BUTTON PRESS INFO)
; AL=O-? (BUTTON NUMBER TO GET INFO FOR)
;
; EXIT PARAMETERS :
;
; AX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
; BX = NUMBER OF PRESSES FOR THIS BUTTON SINCE LAST
; CALL (0-65535)
; CX = X COORDINATE AT LAST PRESS TIME
; DX = Y COORDINATE AT LAST PRESS TIME
;
; NOTE: THE BUTTON STATUS WORD RETURNS THE CURRENT PRESSED/RELEASED
; STATUS FOR ALL BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO
; ONE BUTTON: (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
; IF A BIT IS SET (1) THENS ITS ASSOCIATED BUTTON IS CURRENTLY
; PRESSED DOWN.
;
; FUNCTION 5 DOES NOT DOESN'T DETECT OVERFLOW.
;
; THE PRESS COUNT IS RESET TO ZERO(0) AFTER EACH CALL.
;
; THE VALUES OF THE HORIZONTAL AND VERTICAL COORDINATES ARE IN
; IN THE RANGES DEFINED BY THE VIRTUAL SCREEN. THESE VALUES
; REPRESENT THE CURSOR POSITION WHEN YOU LAST PRESSED THE BUTTON,
; NOT THE CURSOR/S CURRENT POSITION.
;
MMButtonPress PROC FAR
BASIC_SETUP
XOR AX,AX ;SETUP IN CASE MOUSE NOT INSTALLED
XOR BX,BX
XOR CX,CX
XOR DX,DX
CMP CS:_MOUSE,0 ;IS A MOUSE INSTALLED AND INITIALIZED
JZ MMButtonPress_exit ;NO
MOV SI,[BP+0EH] ;GET THE MOUSE BUTTON THAT YOU WANT CHECKED
MOV BX,[SI]
MOV AX,0005H
INT MOUSE
MMButtonPress_exit:
MOV SI,[BP+0CH] ;BUTTON STATUS FOR ALL BUTTONS
MOV [SI],AX
MOV SI,[BP+0AH] ;NUMBER OF RELEASES FOR THIS BUTTON
MOV [SI],BX
MOV SI,[BP+08H] ;X COORDINATE AT LAST PRESS TIME
MOV [SI],CX
MOV SI,[BP+06H] ;Y COORDINATE AT LAST PRESS TIME
MOV [SI],DX
BASIC_CLEANUP
RET 10D
MMButtonPress ENDP
;
;
; FUNCTION=6
;
; BASIC: CALL MMButtonRelease(MMButton%,_
; MMButton.status%,_
; MMButton.releases%,_
; MMPress.xord%,_
; MMPress.yord%)
; ENTRY PARAMETERS:
;
; AH=6 (GET BUTTON RELEASE INFO)
; AL=O-? (BUTTON NUMBER TO GET INFO FOR)
;
; EXIT PARAMETERS :
;
; AX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
; BX = NUMBER OF RELEASES FOR THIS BUTTON SINCE LAST
; CALL (0-65535)
; CX = X COORDINATE AT LAST RELEASE TIME
; DX = Y COORDINATE AT LAST RELEASE TIME
;
; NOTE: THE BUTTON STATUS WORD RETURNS THE CURRENT PRESS/RELEASE STATUS
; FOR ALL BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
; (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
; IF A BIT IS SET (1) THENS ITS ASSOCIATED BUTTON IS CURRENTLY
; PRESSED DOWN.
;
; FUNCTION 6 DOES NOT DOESN'T DETECT OVERFLOW.
;
; THE RELEASE COUNT IS RESET TO ZERO(0) AFTER EACH CALL.
;
; THE VALUES OF THE HORIZONTAL AND VERTICAL COORDINATES ARE IN
; IN THE RANGES DEFINED BY THE VIRTUAL SCREEN. THESE VALUES
; REPRESENT THE CURSOR POSITION WHEN YOU LAST RELEASED THE BUTTON,
; NOT THE CURSOR'S CURRENT POSITION.
;
MMButtonRelease PROC FAR
BASIC_SETUP
XOR AX,AX ;SETUP IN CASE MOUSE NOT INSTALLED
XOR BX,BX
XOR CX,CX
XOR DX,DX
CMP CS:_MOUSE,0 ;IS A MOUSE INSTALLED AND INITIALIZED
JZ MMButtonRelease_exit ;NO
MOV SI,[BP+0EH] ;GET THE MOUSE BUTTON THAT YOU WANT CHECKED
MOV BX,[SI]
MOV AX,0006H
INT MOUSE
MMButtonRelease_exit:
MOV SI,[BP+0CH] ;BUTTON STATUS FOR ALL BUTTONS
MOV [SI],AX
MOV SI,[BP+0AH] ;NUMBER OF RELEASES FOR THIS BUTTON
MOV [SI],BX
MOV SI,[BP+08H] ;X COORDINATE AT LAST RELEASE TIME
MOV [SI],CX
MOV SI,[BP+06H] ;Y COORDINATE AT LAST RELEASE TIME
MOV [SI],DX
BASIC_CLEANUP
RET 10D
MMButtonRelease ENDP
;
;
;
; BASIC: CALL MMBUTTON(LEFT.BUTTON%,RIGHT.BUTTON%)
;
; FUNCTION=6
;
;
;
; ENTRY PARAMETERS:
;
; AH=6 (GET BUTTON RELEASE INFO)
; AL=O-? (BUTTON NUMBER TO GET INFO FOR)
;
; EXIT PARAMETERS :
;
; AX = BUTTON STATUS FOR ALL BUTTONS (BIT SET=PRESSED)
; BX = NUMBER OF RELEASE FOR THIS BUTTON
; (0=32768)
; CX = X COORDINATE AT LAST RELEASE TIME
; DX = Y COORDINATE AT LAST RELEASE TIME
;
; NOTE: THE BUTTON STATUS WORD RETURNS THE PRESSED STATUS FOR ALL
; BUTTONS. EACH BIT IN THE WORD CORRESPONDS TO ONE BUTTON:
; (BIT 0=1ST BUTTON, BIT 1=SECOND BUTTON..ETC).
; IF A BIT IS SET (1) THENS ITS ASSOCIATED BUTTON IS CURRENTLY
; PRESSED DOWN.
;
; FUNCTION 6 DOES NOT DOESN'T DETECT OVERFLOW.
;
; THE RELEASE COUNT IS RESET TO ZERO(0) AFTER EACH CALL.
;
; THE VALUES OF THE HORIZONTAL AND VERTICAL COORDINATES ARE IN
; IN THE RANGES DEFINED BY THE VIRTUAL SCREEN. THESE VALUES
; REPRESENT THE CURSOR POSITION WHEN YOU LAST RELEASED THE BUTTON,
; NOT THE CURSOR'S CURRENT POSITION.
;
MMbutton PROC FAR
CMP CS:_MOUSE,0 ;IS A MOUSE INSTALLED AND INITIALIZED
JZ MMbutton_EXIT ;NO
BASIC_SETUP
XOR BX,BX ;
MOV AX,0006 ;CHECK WHICH BUTTONS HAVE BEEN RELEASED
INT MOUSE
MOV BX,NOT_PRESSED ;ASSUME "FALSE" (NOT PRESSED) FOR BUTTON 1
SHR AX,1 ;BUTTON 1 (LEFT PRESSED) ?
JNB MMbutton_1 ;NO,
MOV BX,PRESSED ;"TRUE" (PRESSED)
MMbutton_1:
MOV SI,[BP+8] ;RETURN BUTTON 1 (LEFT) PRESSED/RELEASED STATE
MOV [SI],BX
MOV BX,NOT_PRESSED ;ASSUME "FALSE" (NOT PRESSED) FOR BUTTON 2
SHR AX,1 ;BUTTON 2 (RIGHT) PRESSED?
JNB MMbutton_2 ;NO
MOV BX,PRESSED ;"TRUE" (PRESSED)
MMbutton_2:
MOV SI,[BP+6] ;RETURN BUTTON 2 (RIGHT) PRESSED/RELEASED STATE
MOV [SI],BX
BASIC_CLEANUP
MMbutton_EXIT:
RET 4d
MMbutton ENDP
;
;
; BASIC: CALL MMSETRANGE(LFTCOL%,TOPROW%,RGTCOL%,BOTROW%)
;
; FUNCTION=7 & 8
;
; SET THE MINIMUM AND MAXIMUM VALUES FOR THE MOUSE'S 'X' AND 'Y'
; AXIS AND ALSO SET THE GAIN VALUE FOR THE MOUSE.
;
; ENTRY PARAMETERS:
;
; AH=7 (SET THE MOUSES X AND Y AXIS)
; CX = MINIMUM 'X' COORDINATE (UPPER LEFT COLUMN)
; DX = MINIMUM 'Y' COORDINATE (UPPER LEFT ROW)
;
; AH=8 (SET THE MOUSES X AND Y AXIS)
; CX = MAXIMUM 'X' COORDINATE (LOWER RIGHT COLUMN)
; DX = MAXIMUM 'Y' COORDINATE (LOWER RIGHT ROW)
;
; BX = MOUSE GAIN VALUE (0-255)
;
; EXIT PARAMETERS :
;
;
;
; NOTE: THE 'X' CO-ORDINATE IS A VALUE FROM 0-639 (COLUMN) AND THE
; 'Y' CO-ORDINATE (ROW) IS A VALUE FROM 0-199. TO 'NORMALIZE'
; THE CO-ORDINATE VALUES FOR A 80X25 TEXT SCREEN, DIVIDE EACH
; VALUE BY 8. IF YOU ARE IN LOW RES GRAPHICS , DIVIDE BY 2.
; IF YOU ARE IN HIGH RES GRAPHICS , THE VALUES ARE FINE.
;
;
; NOTE: IF A LARGE GAIN VALUE IS USED, VERY LITTLE MOVEMENT OF THE
; MOUSE CAUSES A LARGE 'X' OR 'Y' CHANGE.
;
MMSETRANGE PROC FAR
CMP CS:_MOUSE,0 ;IS A MOUSE INSTALLED AND INITIALIZED
JZ MMSETRANGE_EXIT ;NO
BASIC_SETUP
;SET HORIZONTAL (X)
MOV SI,[BP+0CH] ;GET UPPER LEFT COLUMN CO-ORDINATE - "X"
MOV CX,[SI]
MOV SI,[BP+08H] ;GET BOTTOM RIGHT COLUMN CO-ORDINATE - "X"
MOV DX,[SI]
MOV AX,0007H ;SET HORIZONMTAL (X)
INT MOUSE
;SET VERTICLE (Y)
MOV SI,[BP+0AH] ;GET UPPER LEFT ROW CO-ORDINATE - "Y"
MOV CX,[SI]
MOV SI,[BP+06H] ;GET BOTTOM RIGHT ROW CO-ORDINATE - "Y"
MOV DX,[SI]
MOV AX,0008H ;SET VERTICLE (Y)
INT MOUSE
;SET THE GAIN VALUE
; MOV SI,[BP+0EH] ;GET THE GAIN VALUE
; MOV BX,[SI]
; MOV AX,000FH ;SET THE GAIN VALUE
; INT MOUSE
BASIC_CLEANUP
MMSETRANGE_EXIT:
; RET 10d ;IF MOUSE GAIN IMPLEMENTED
RET 8d
MMSETRANGE ENDP
_MOUSE DW 0
;CODE ENDS
END