Files
kolibrios/programs/system/mousemul/trunk/mousemul.asm
eAndrew f56c212b3b Notify3: del HARDDRRIVE icon, integration in @icon and mouseemul
git-svn-id: svn://kolibrios.org@4814 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-04-10 13:37:25 +00:00

307 lines
6.5 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
; <--- description --->
; compiler: FASM 1.67.23
; name: Mouse Emulation For KolibriOS
;-----------------------------------------------------------------------------
; version: 1.2
; last update: 01/06/2012
; written by: Marat Zakiyanov aka Mario79, aka Mario
; changes: using new functions 66.6 and 66.7
;-----------------------------------------------------------------------------
; version: 1.1
; last update: 26/05/2012
; written by: Lipatov Kirill aka Leency
; changes: shows notify with instructions, while opening program
;-----------------------------------------------------------------------------
; version: 1.0
; last update: 04/09/2010
; written by: Marat Zakiyanov aka Mario79, aka Mario
; changes: total optimization of code,
; different events for Up and Down of key Num 5
; advansed acceleration mode
;-----------------------------------------------------------------------------
; version: 0.8
; last update: 03/10/2007
; written by: Zlobny_Gluk
; e-mail: umbrosia@land.ru
;-----------------------------------------------------------------------------
; <--- include all KolibriOS stuff --->
include "lang.inc"
include '../../../macros.inc'
; <--- start of KolibriOS application --->
MEOS_APP_START
; <--- start of code --->
CODE
;-----------------------------------------------------------------------------
start:
mcall 70,notifyapp
start1:
xor ebx,ebx
mcall 40
@@:
mcall 23,10
mcall 66,3
test eax,0x80 ;NumLock status
jz @r
mov ebx,4
call hotkeys_common
mcall 40,10b
still:
mcall 10
cmp eax,2 ; if event == 2
jne still
;-----------------------------------------------------------------------------
key: ; key event handler
call mouse_acceleration
mcall 2 ; get key code
push eax
mcall 66,3
test eax,0x80 ;NumLock status
pop eax
jnz @f
mov ebx,5
call hotkeys_common
jmp start1
@@:
cmp al,2
jne still
xor edx,edx
cmp ah,80 ; Down Num 2
je keytwo
cmp ah,81 ; Down Num 3
je keythree
cmp ah,75 ; Down Num 4
je keyfour
cmp ah,77 ; Down Num 6
je keysix
cmp ah,71 ; Down Num 7
je keyseven
cmp ah,72 ; Down Num 8
je keyeight
cmp ah,73 ; Down Num 9
je keynine
cmp ah,76 ; Down Num 5
je keyfive
cmp ah,204 ; Up Num 5
je keyfive_1
cmp ah,79 ; Down Num 1
jne still
;-----------------------------------------------------------------------------
keyone:
call down
keyfour:
call left
jmp mouseread
;-----------------------------------------------------------------------------
keythree:
call right
keytwo:
call down
jmp mouseread
;-----------------------------------------------------------------------------
keyseven:
call left
keyeight:
call up
jmp mouseread
;-----------------------------------------------------------------------------
keynine:
call up
keysix:
call right
jmp mouseread
;-----------------------------------------------------------------------------
keyfive:
inc edx
keyfive_1:
mcall 18,19,5
jmp still
;-----------------------------------------------------------------------------
left:
mov eax,esi
shl eax,16
sub edx,eax
ret
;-----------------------------------------------------------------------------
right:
mov eax,esi
shl eax,16
add edx,eax
ret
;-----------------------------------------------------------------------------
down:
add edx,esi
ret
;-----------------------------------------------------------------------------
up:
sub edx,esi
ret
;-----------------------------------------------------------------------------
mouseread:
xor ebx,ebx
mcall 37
add edx,eax
sravn:
xor ebx,ebx
xor edi,edi
real:
mov ebx,edx
mov edi,ebx
shr ebx,16 ; get x1
; shl edi,16 ; get y1
; shr edi,16
and edi,0xffff
nullli:
add ebx,16
cmp ebx,65535
jg xmin
sub ebx,15
add edi,16
cmp edi,65535
jg ymin
sub edi,15
razr:
mcall 14
mov ecx,eax
shr eax,16 ; get x2
; shl ecx,16 ; get y2
; shr ecx,16
and ecx,0xffff
rightdownli:
cmp eax,ebx
jl xmax
cmp ecx,edi
jl ymax
mousewrite:
mcall 18,19,4
mcall 26,9
mov [mouse_timer_ticks],eax
jmp still
;-----------------------------------------------------------------------------
mouse_acceleration:
xor esi,esi
inc esi
mcall 18,19,2
mov ecx,eax
mcall 26,9
sub eax,[mouse_timer_ticks]
cmp eax,ecx ; mouse_delay
ja @f
xor ecx,ecx
mcall 18,19 ; checkspeed
mov esi,eax
shl esi,2
@@:
ret
;-----------------------------------------------------------------------------
xmax:
dec eax
dec ebx
dec edi
shl eax,16
add edi,eax
mov edx,edi
jmp sravn
;-----------------------------------------------------------------------------
xmin:
mov edx,edi
jmp sravn
;-----------------------------------------------------------------------------
ymax:
dec ecx
dec ebx
shl ebx,16
mov edi,ebx
add edi,ecx
mov edx,edi
jmp sravn
;-----------------------------------------------------------------------------
ymin:
shl ebx,16
mov edx,ebx
shr ebx,16
jmp sravn
;-----------------------------------------------------------------------------
hotkeys_common:
xor ecx,ecx
xor edx,edx
mov cl,79 ; Down Num 1
mcall 66
mov cl,80 ; Down Num 2
mcall 66
mov cl,81 ; Down Num 3
mcall 66
mov cl,75 ; Down Num 4
mcall 66
mov cl,76 ; Down Num 5
mcall 66
mov cl,204 ; Up Num 5
mcall 66
mov cl,77 ; Down Num 6
mcall 66
mov cl,71 ; Down Num 7
mcall 66
mov cl,72 ; Down Num 8
mcall 66
mov cl,73 ; Down Num 9
mcall 66
; disable/enable input, work only hotkeys (f.66.6,66.7)
add ebx,2
mcall 66
ret
;-----------------------------------------------------------------------------
; <--- initialised data --->
DATA
;-----------------------------------------------------------------------------
; <--- uninitialised data --->
UDATA
mouse_timer_ticks dd 0
;-----------------------------------------------------------------------------
if lang eq ru
ud_user_message db '"NumLock ¢ª«î砥⠨ ¢ëª«îç ¥â í¬ã«ïâ®à ¬ëè¨.\n“¯à ¢«¥­¨¥ ç¥à¥§ Numpad." -I',0
else if lang eq it
ud_user_message db '"NumLock - on/off - usa Numpad per muovere il cursore." -I',0
else
ud_user_message db '"NumLock - on/off mouse emul. Numpad - move cursor." -I',0
end if
notifyapp:
dd 7
dd 0
dd ud_user_message
dd 0
dd 0
db '@notify',0
;-----------------------------------------------------------------------------
MEOS_APP_END
; <--- end of KolibriOS application --->
; ZG