marinell@dalcs.UUCP (Kevin Marinelli) (06/06/88)
Here is a small assembly routine that allows IBM Prof. FORTRAN to
interface with the Microsoft Mouse. The sample program below shows
some of the interfacing possibilities to the mouse. For more info,
consult the Microsoft Programmer's Reference Guide, available from
Microsoft.
Kevin Marinelli
Academic Computing Services
Dalhousie University
Halifax, Nova Scotia
Canada
------PMOUSE.FOR-------CUT HERE------------------------------------
PROGRAM MOUSE
C Microsoft mouse parameters
Integer*2 m1,m2,m3,m4
C Position variables
Integer x,y,idx,idy
C Detect if mouse is present (m1=0)
M1=0
M2=0
M3=0
M4=0
call mfun1(m1,m2,m3,m4)
if(m1.eq.0) then
Print*,'No mouse is installed'
stop
endif
x=0
y=0
10 continue
C get mickey count (delta X and delta Y) (m1=11)
m1=11
m2=0
m3=0
m4=0
call mfun1(m1,m2,m3,m4)
idx=m3
idy=m4
ix = ix + float(idx)
iy = iy + float(idy)
C get mouse button and cursor status (m1=3) NOTE THIS IS ONLY TO GET
C THE BUTTON PRESS INFO, IN THIS PROGRAM. THIS DOES NOT LIMIT THE
C POSITION INFORMATION TO SCREEN COORDINATES ONLY.
m1=3
m2=0
m3=0
m4=0
call mfun1(m1,m2,m3,m4)
C STOP if BOTH BUTTONS ARE PRESSED
if(m2.eq.3) goto 999
C DRAW TO (IX,IY) THIS IS MY OWN SUBROUTINE TO DRAW ON THE IBM PGA.
CALL DRAW(X,Y)
goto 10
999 continue
stop
end
-----PMFUN.ASM---------CUT HERE------------------------------------
Title Professional FORTRAN interface to Microsoft Mouse
PAGE ,80
PARMBLK STRUC
M1 DD ?
M2 DD ?
M3 DD ?
M4 DD ?
PARMBLK ENDS
MYDATA SEGMENT 'DATA'
DB 'MFUN1'
SP_SAVE DW 0
DD MFUN1
DD 0
bsave dw 0
MYDATA ENDS
STACK SEGMENT WORD STACK 'STACK'
DB 256 DUP(?)
STACK ENDS
MYCODE SEGMENT 'CODE'
ASSUME cs:MYCODE,ds:MYDATA
DW SEG MYDATA
MFUN1 PROC FAR
PUBLIC MFUN1
MOV AX,MYDATA
MOV DS,AX
MOV SP_SAVE,SP
; setup parameters for Mouse Call being careful not to obliterate BX
lds di,es:m1[bx]
mov ax,[di]
lds di,es:m3[bx]
mov cx,[di]
lds di,es:m4[bx]
mov dx,[di]
lds di,es:m3[bx]
push bx
mov bx,[di]
; access mouse
int 33h
exit:
; return mouse parameters, again being careful not to obliterate BX
mov bsave,bx
pop bx
lds di,es:m1[bx]
mov [di],ax
mov ax,bsave
lds di,es:m2[bx]
mov [di],ax
lds di,es:m3[bx]
mov [di],cx
lds di,es:m4[bx]
mov [di],dx
RET
MFUN1 ENDP
MYCODE ENDS
END
------------------------------CUT HERE----------------------------
--
Kevin Marinelli
Academic Computing Services ! marinell@dal.bitnet BITNET
Dalhousie University ! marinell@dalcs.UUCP UUCP
Halifax, Nova Scotia, CANADA ! marinell%dal.bitnet@wiscvm.wisc.edu INTERNET