[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]
Program MouseInt;
{
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÝÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÞÛÛÛ±±
ÛÛÛÝÛÛ ÛÛÞÛÛÛ±±
ÛÛÛÝÛÛ Mouse interrupt subroutine handling ÛÛÞÛÛÛ±±
ÛÛÛÝÛÛ ÛÛÞÛÛÛ±±
ÛÛÛÝÛÛ Aleksandar Dlabac ÛÛÞÛÛÛ±±
ÛÛÛÝÛÛ (C)1997. Dlabac Bros. Company ÛÛÞÛÛÛ±±
ÛÛÛÝÛÛ ------------------------------ ÛÛÞÛÛÛ±±
ÛÛÛÝÛÛ adlabac@urcpg.urc.cg.ac.yu ÛÛÞÛÛÛ±±
ÛÛÛÝÛÛ adlabac@urcpg.pmf.cg.ac.yu ÛÛÞÛÛÛ±±
ÛÛÛÝÛÛ ÛÛÞÛÛÛ±±
ÛÛÛÝßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÞÛÛÛ±±
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
}
Uses Crt;
Var ConditionMask : word; { bits: F-5 4 3 2 1 0
unused -----| | | | | |
call if right button released ----------| | | | |
call if right button pressed --------------| | | |
call if left button released ------------------| | |
call if left button pressed ----------------------| |
call if mouse moves --------------------------|
Note: with this mask you define which action will cause your subroutine
to execute. For example mask 0000000000001010 defines that
subroutine will be executed every time the left or right mouse
button is released. }
ButtonState : word; { 0 - none, 1 - left, 2 - right, 3 - both }
CursorColumn : word;
CursorRow : word;
HorMickeyCnt : word;
VertMickeyCnt : word;
OldES, OldDX : word;
BothButtons : Boolean;
Procedure DoSomething; Far;
Begin
Asm
MOV AX,0002H { Hide cursor }
INT 33H
End;
ClrScr;
Write ('Press both mouse buttons to exit...');
GotoXY (20,12);
Write ('Buttons: ');
Case ButtonState and $0003 of
0 : Write ('None');
1 : Write ('Left');
2 : Write ('Right');
3 : BothButtons:=True
End;
GotoXY (20,14);
Write ('X: ',CursorColumn:4,' Y: ',CursorRow:4);
Asm
MOV AX,0001H { Show cursor }
INT 33H
End
End;
Procedure MouseHandler; Far; Assembler;
Asm
PUSH DS
PUSH AX
MOV AX,Seg @Data
MOV DS,AX
POP AX
MOV ConditionMask,AX
MOV ButtonState,BX
MOV CursorColumn,CX
MOV CursorRow,DX
MOV HorMickeyCnt,SI
MOV VertMickeyCnt,DI
CALL DoSomething
POP DS
End;
Procedure Init;
Var Status : word;
Begin
BothButtons:=False;
Asm
MOV AX,0000H
INT 33H
MOV Status,AX
End;
If Status=$0000 then
Begin
Writeln ('Mouse driver not installed!');
Halt
End;
Asm
MOV AX,0014H
MOV CX,00011111B { All actions. }
MOV DX,Seg MouseHandler
MOV ES,DX
MOV DX,Offset MouseHandler
INT 33H
MOV OldES,ES
MOV OldDX,DX
MOV AX,0001H
INT 33H { Get previous subroutine }
End;
ClrScr;
Write ('Your mouse is waiting...')
End;
Procedure Done;
Begin
Asm
MOV AX,0002H { Hide cursor }
INT 33H
MOV AX,0014H
MOV CX,00011111B
MOV ES,OldES
MOV DX,OldDX
INT 33H { Return previous subroutine }
End;
ClrScr
End;
Begin
Init;
Repeat
Until BothButtons;
Done
End.
[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]