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