[comp.sys.ibm.pc] Microsoft Mouse interface for IBM Professional Fortran

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