home *** CD-ROM | disk | FTP | other *** search
- Title Mouse routines for ApBasic
- Page 60,130
- ; Created 11-12-1987 k. murray
- ;
- Comment *
- These routines allow interrupt driven mouse control.
- The subprograms are defined as:
-
- SUB SetMouseTrap CondMask%,TrapNo% External "MouseI.Com"
- SUB ResetMouseTrap External "" 3
- SUB GetMouseInfo CondMask%,Hpos%,Vpos%,Buttons% External "" 6
-
- Updates:
- None.
- *
- Cseg Segment byte public 'Code'
- Assume Cs:Cseg,Ds:nothing,Es:nothing
- Start:
- Jmp SetMouseTrap ; set a trap for mouse interrupt
- Jmp near ptr ResetMouseTrap ; reset mouse trap
- Jmp GetMouseInfo ; get info returned from trap
- ;
- ; Some data locations
- ProgDs Dw 0 ; Program's Data segment for int routine
- TrapMask Dw 0,0 ; mask to use on trap doubleword
- RT_CondMask Dw 0 ; Returned condition mask
- RT_HPos Dw 0 ; Returned horizontal position
- RT_VPos Dw 0 ; Returned vertical position
- RT_Buttons Dw 0 ; Returned buttons status
- ;
- Comment *
- SUB GetMouseInfo CondMask%,Hpos%,Vpos%,Buttons%
- Stack frame:
- Bp+12 CondMask%
- Bp+10 Hpos%
- Bp+8 Vpos%
- Bp+6 Buttons%
- *
- GetMouseInfo proc far
- Push Bp
- Mov Bp,Sp
- Mov Ax,Cs:RT_CondMask
- Mov Bx,[Bp+12]
- Mov [Bx],Ax
- Mov Ax,Cs:RT_HPos
- Mov Bx,[Bp+10]
- Mov [Bx],Ax
- Mov Ax,Cs:RT_VPos
- Mov Bx,[Bp+8]
- Mov [Bx],Ax
- Mov Ax,Cs:RT_Buttons
- Mov Bx,[Bp+6]
- Mov [Bx],Ax
- Pop Bp
- Ret 4*2 ; remove 4 parameters
- GetMouseInfo endp
- ;
- ;
- Comment *
- SUB SetMouseTrap CondMask%, TrapNo%
- Stack frame:
- Bp+8 CondMask%
- Bp+6 TrapNo% adr.
- Bp+4 Return segment
- Bp+2 Return offset
- Bp+0 Saved Bp
- *
- SetMouseTrap Proc Far
- Push Bp
- Mov Bp,Sp
- Mov Cs:ProgDs,Ds ; save program Ds
- Mov Bx,[Bp+6] ; Get user number adr.
- Mov Cx,[Bx] ; Get user number
- Dec Cx ; make relative to zero
- Cmp Cx,32
- Jb SetMouse2
- Mov Cx,32 ; use smallest
- SetMouse2:
- Xor Ax,Ax
- Mov Dx,Ax
- Inc Ax ; set low bit
- Clc ; clear carry
- Jcxz SetMouse6
- SetMouse4:
- Rcl Ax,1
- Rcl Dx,1 ; shift dword over one bit
- Loop SetMouse4
- SetMouse6:
- Mov Cs:TrapMask,Ax
- Mov Cs:TrapMask+2,Dx ; save trap mask
- Mov Bx,[Bp+8]
- Mov Cx,[Bx] ; get condition mask in Cx
- Push Cs
- Pop Es
- Mov Dx,offset MouseTrap ; Es:Dx=adr. of moust trap routine
- Mov Ax,12
- Int 33h ; set calling routine
- Pop Bp
- Ret 2*2 ; remove 2 parameters
- SetMouseTrap Endp
- ;
- ; Mouse call will be set to this routine
- MouseTrap Proc Far
- Push Ds
- Push Cs
- Pop Ds
- Assume Ds:Cseg
- Mov RT_CondMask,Ax
- Mov RT_Buttons,Bx
- Mov RT_Hpos,Cx
- Mov RT_Vpos,Dx ; save status
- Mov Ax,TrapMask
- Mov Dx,TrapMask+2
- Mov Ds,ProgDs
- Or Ds:[0],Ax
- Or Ds:[2],Dx ; set trap bit
- Pop Ds
- Assume Ds:Nothing
- Ret
- MouseTrap Endp
- ;
- ; SUB ResetMouseTrap
- ResetMouseTrap proc far
- Push Bp
- Mov Bp,Sp
- Mov Ax,12
- Xor Cx,Cx
- Int 33h ; set calling routine with not conditions
- Pop Bp
- Ret
- ResetMouseTrap endp
- ;
- ;
- Cseg Ends
- End Start