forked from KolibriOS/kolibrios
MousEmul
1) total optimization of code 2) different events for Up and Down of key Num 5 3) advansed acceleration mode git-svn-id: svn://kolibrios.org@1601 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
404bf32ac0
commit
d47a233b2a
@ -1,117 +0,0 @@
|
|||||||
0x0 RECT.left
|
|
||||||
0x4 RECT.top
|
|
||||||
0x8 RECT.right
|
|
||||||
0xC RECT.bottom
|
|
||||||
0x0 BOX.left
|
|
||||||
0x4 BOX.top
|
|
||||||
0x8 BOX.width
|
|
||||||
0xC BOX.height
|
|
||||||
0x0 process_information.cpu_usage
|
|
||||||
0x4 process_information.window_stack_position
|
|
||||||
0x6 process_information.window_stack_value
|
|
||||||
0x8 process_information.anonymous?0000014
|
|
||||||
0xA process_information.process_name
|
|
||||||
0x16 process_information.memory_start
|
|
||||||
0x1A process_information.used_memory
|
|
||||||
0x1E process_information.PID
|
|
||||||
0x22 process_information.box
|
|
||||||
0x22 process_information.box.left
|
|
||||||
0x26 process_information.box.top
|
|
||||||
0x2A process_information.box.width
|
|
||||||
0x2E process_information.box.height
|
|
||||||
0x32 process_information.slot_state
|
|
||||||
0x34 process_information.anonymous?0000015
|
|
||||||
0x36 process_information.client_box
|
|
||||||
0x36 process_information.client_box.left
|
|
||||||
0x3A process_information.client_box.top
|
|
||||||
0x3E process_information.client_box.width
|
|
||||||
0x42 process_information.client_box.height
|
|
||||||
0x46 process_information.wnd_state
|
|
||||||
0x47 process_information.anonymous?0000016
|
|
||||||
0x0 system_colors.frame
|
|
||||||
0x4 system_colors.grab
|
|
||||||
0x8 system_colors.grab_button
|
|
||||||
0xC system_colors.grab_button_text
|
|
||||||
0x10 system_colors.grab_text
|
|
||||||
0x14 system_colors.work
|
|
||||||
0x18 system_colors.work_button
|
|
||||||
0x1C system_colors.work_button_text
|
|
||||||
0x20 system_colors.work_text
|
|
||||||
0x24 system_colors.work_graph
|
|
||||||
0x0 FILEDATE.Second
|
|
||||||
0x1 FILEDATE.Minute
|
|
||||||
0x2 FILEDATE.Hour
|
|
||||||
0x3 FILEDATE.anonymous?000004B
|
|
||||||
0x4 FILEDATE.Day
|
|
||||||
0x5 FILEDATE.Month
|
|
||||||
0x6 FILEDATE.Year
|
|
||||||
0x0 FILEINFO.Attributes
|
|
||||||
0x4 FILEINFO.IsUnicode
|
|
||||||
0x5 FILEINFO.anonymous?000005C
|
|
||||||
0x8 FILEINFO.DateCreate
|
|
||||||
0x8 FILEINFO.DateCreate.Second
|
|
||||||
0x9 FILEINFO.DateCreate.Minute
|
|
||||||
0xA FILEINFO.DateCreate.Hour
|
|
||||||
0xB FILEINFO.DateCreate.anonymous?000004B
|
|
||||||
0xC FILEINFO.DateCreate.Day
|
|
||||||
0xD FILEINFO.DateCreate.Month
|
|
||||||
0xE FILEINFO.DateCreate.Year
|
|
||||||
0x10 FILEINFO.DateAccess
|
|
||||||
0x10 FILEINFO.DateAccess.Second
|
|
||||||
0x11 FILEINFO.DateAccess.Minute
|
|
||||||
0x12 FILEINFO.DateAccess.Hour
|
|
||||||
0x13 FILEINFO.DateAccess.anonymous?000004B
|
|
||||||
0x14 FILEINFO.DateAccess.Day
|
|
||||||
0x15 FILEINFO.DateAccess.Month
|
|
||||||
0x16 FILEINFO.DateAccess.Year
|
|
||||||
0x18 FILEINFO.DateModify
|
|
||||||
0x18 FILEINFO.DateModify.Second
|
|
||||||
0x19 FILEINFO.DateModify.Minute
|
|
||||||
0x1A FILEINFO.DateModify.Hour
|
|
||||||
0x1B FILEINFO.DateModify.anonymous?000004B
|
|
||||||
0x1C FILEINFO.DateModify.Day
|
|
||||||
0x1D FILEINFO.DateModify.Month
|
|
||||||
0x1E FILEINFO.DateModify.Year
|
|
||||||
0x20 FILEINFO.Size
|
|
||||||
0x24 __start
|
|
||||||
0x346 __end
|
|
||||||
0xB60 __memory
|
|
||||||
0xB60 __stack
|
|
||||||
0x24 start
|
|
||||||
0x2C wait_event_one
|
|
||||||
0x15D checkspeed
|
|
||||||
0x53 wait_event_two
|
|
||||||
0xEA unset_hotkeys
|
|
||||||
0x76 set_hotkeys
|
|
||||||
0x67 key
|
|
||||||
0x202 mousewriteli
|
|
||||||
0x16A mouseread
|
|
||||||
0x186 sravn
|
|
||||||
0x18A real
|
|
||||||
0x197 nullli
|
|
||||||
0x1E7 xmin
|
|
||||||
0x1F8 ymin
|
|
||||||
0x1B3 razr
|
|
||||||
0x1C3 rightdownli
|
|
||||||
0x1DB xmax
|
|
||||||
0x1EB ymax
|
|
||||||
0x1CB mousewrite
|
|
||||||
0x244 keyone
|
|
||||||
0x259 keytwo
|
|
||||||
0x26E keythree
|
|
||||||
0x283 keyfour
|
|
||||||
0x298 keysix
|
|
||||||
0x2AD keyseven
|
|
||||||
0x2C2 keyeight
|
|
||||||
0x2D7 keynine
|
|
||||||
0x2EC keyfive
|
|
||||||
0x314 left
|
|
||||||
0x332 down
|
|
||||||
0x323 right
|
|
||||||
0x33C up
|
|
||||||
0x316 leftstart
|
|
||||||
0x325 rightstart
|
|
||||||
0x334 downstart
|
|
||||||
0x33E upstart
|
|
||||||
0x346 __data
|
|
||||||
0x346 __udata
|
|
@ -1,2 +1,2 @@
|
|||||||
@fasm mousEmul.asm mousemul
|
@fasm mousemul.asm mousemul
|
||||||
@pause
|
@pause
|
13
programs/system/mousemul/trunk/build.sh
Executable file
13
programs/system/mousemul/trunk/build.sh
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# This script does for linux the same as build.bat for DOS,
|
||||||
|
# it compiles the KoOS kernel, hopefully ;-)
|
||||||
|
|
||||||
|
echo "lang fix en"
|
||||||
|
echo "lang fix en" > lang.inc
|
||||||
|
fasm -m 16384 mousemul.asm mousemul
|
||||||
|
rm -f lang.inc
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,263 +0,0 @@
|
|||||||
; new application structure
|
|
||||||
macro meos_app_start
|
|
||||||
{
|
|
||||||
use32
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
db 'MENUET01'
|
|
||||||
dd 0x01
|
|
||||||
dd __start
|
|
||||||
dd __end
|
|
||||||
dd __memory
|
|
||||||
dd __stack
|
|
||||||
|
|
||||||
if used __params & ~defined __params
|
|
||||||
dd __params
|
|
||||||
else
|
|
||||||
dd 0x0
|
|
||||||
end if
|
|
||||||
|
|
||||||
dd 0x0
|
|
||||||
}
|
|
||||||
MEOS_APP_START fix meos_app_start
|
|
||||||
|
|
||||||
macro code
|
|
||||||
{
|
|
||||||
__start:
|
|
||||||
}
|
|
||||||
CODE fix code
|
|
||||||
|
|
||||||
macro data
|
|
||||||
{
|
|
||||||
__data:
|
|
||||||
}
|
|
||||||
DATA fix data
|
|
||||||
|
|
||||||
macro udata
|
|
||||||
{
|
|
||||||
if used __params & ~defined __params
|
|
||||||
__params:
|
|
||||||
db 0
|
|
||||||
__end:
|
|
||||||
rb 255
|
|
||||||
else
|
|
||||||
__end:
|
|
||||||
end if
|
|
||||||
__udata:
|
|
||||||
}
|
|
||||||
UDATA fix udata
|
|
||||||
|
|
||||||
macro meos_app_end
|
|
||||||
{
|
|
||||||
align 32
|
|
||||||
rb 2048
|
|
||||||
__stack:
|
|
||||||
__memory:
|
|
||||||
}
|
|
||||||
MEOS_APP_END fix meos_app_end
|
|
||||||
|
|
||||||
|
|
||||||
; macro for defining multiline text data
|
|
||||||
struc mstr [sstring]
|
|
||||||
{
|
|
||||||
forward
|
|
||||||
local ssize
|
|
||||||
virtual at 0
|
|
||||||
db sstring
|
|
||||||
ssize = $
|
|
||||||
end virtual
|
|
||||||
dd ssize
|
|
||||||
db sstring
|
|
||||||
common
|
|
||||||
dd -1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
; strings
|
|
||||||
macro sz name,[data] { ; from MFAR [mike.dld]
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
label name
|
|
||||||
end if
|
|
||||||
forward
|
|
||||||
if used name
|
|
||||||
db data
|
|
||||||
end if
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
.size = $-name
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro lsz name,[lng,data] { ; from MFAR [mike.dld]
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
label name
|
|
||||||
end if
|
|
||||||
forward
|
|
||||||
if (used name)&(lang eq lng)
|
|
||||||
db data
|
|
||||||
end if
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
.size = $-name
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; easy system call macro
|
|
||||||
macro mpack dest, hsrc, lsrc
|
|
||||||
{
|
|
||||||
if (hsrc eqtype 0) & (lsrc eqtype 0)
|
|
||||||
mov dest, (hsrc) shl 16 + lsrc
|
|
||||||
else
|
|
||||||
if (hsrc eqtype 0) & (~lsrc eqtype 0)
|
|
||||||
mov dest, (hsrc) shl 16
|
|
||||||
add dest, lsrc
|
|
||||||
else
|
|
||||||
mov dest, hsrc
|
|
||||||
shl dest, 16
|
|
||||||
add dest, lsrc
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro __mov reg,a,b { ; mike.dld
|
|
||||||
if (~a eq)&(~b eq)
|
|
||||||
mpack reg,a,b
|
|
||||||
else if (~a eq)&(b eq)
|
|
||||||
mov reg,a
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro mcall a,b,c,d,e,f { ; mike.dld
|
|
||||||
__mov eax,a
|
|
||||||
__mov ebx,b
|
|
||||||
__mov ecx,c
|
|
||||||
__mov edx,d
|
|
||||||
__mov esi,e
|
|
||||||
__mov edi,f
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; optimize the code for size
|
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
|
||||||
|
|
||||||
macro add arg1,arg2
|
|
||||||
{
|
|
||||||
if (arg2 eqtype 0)
|
|
||||||
if (arg2) = 1
|
|
||||||
inc arg1
|
|
||||||
else
|
|
||||||
add arg1,arg2
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
add arg1,arg2
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro sub arg1,arg2
|
|
||||||
{
|
|
||||||
if (arg2 eqtype 0)
|
|
||||||
if (arg2) = 1
|
|
||||||
dec arg1
|
|
||||||
else
|
|
||||||
sub arg1,arg2
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
sub arg1,arg2
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro mov arg1,arg2
|
|
||||||
{
|
|
||||||
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
|
|
||||||
if (arg2) = 0
|
|
||||||
xor arg1,arg1
|
|
||||||
else if (arg2) = 1
|
|
||||||
xor arg1,arg1
|
|
||||||
inc arg1
|
|
||||||
else if (arg2) = -1
|
|
||||||
or arg1,-1
|
|
||||||
else if (arg2) > -128 & (arg2) < 128
|
|
||||||
push arg2
|
|
||||||
pop arg1
|
|
||||||
else
|
|
||||||
mov arg1,arg2
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
mov arg1,arg2
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
macro struct name
|
|
||||||
{
|
|
||||||
virtual at 0
|
|
||||||
name name
|
|
||||||
sizeof.#name = $ - name
|
|
||||||
end virtual
|
|
||||||
}
|
|
||||||
|
|
||||||
; structures used in MeOS
|
|
||||||
struc process_information
|
|
||||||
{
|
|
||||||
.cpu_usage dd ? ; +0
|
|
||||||
.window_stack_position dw ? ; +4
|
|
||||||
.window_stack_value dw ? ; +6
|
|
||||||
.not_used1 dw ? ; +8
|
|
||||||
.process_name rb 12 ; +10
|
|
||||||
.memory_start dd ? ; +22
|
|
||||||
.used_memory dd ? ; +26
|
|
||||||
.PID dd ? ; +30
|
|
||||||
.x_start dd ? ; +34
|
|
||||||
.y_start dd ? ; +38
|
|
||||||
.x_size dd ? ; +42
|
|
||||||
.y_size dd ? ; +46
|
|
||||||
.slot_state dw ? ; +50
|
|
||||||
rb (1024-52)
|
|
||||||
}
|
|
||||||
struct process_information
|
|
||||||
|
|
||||||
struc system_colors
|
|
||||||
{
|
|
||||||
.frame dd ?
|
|
||||||
.grab dd ?
|
|
||||||
.grab_button dd ?
|
|
||||||
.grab_button_text dd ?
|
|
||||||
.grab_text dd ?
|
|
||||||
.work dd ?
|
|
||||||
.work_button dd ?
|
|
||||||
.work_button_text dd ?
|
|
||||||
.work_text dd ?
|
|
||||||
.work_graph dd ?
|
|
||||||
}
|
|
||||||
struct system_colors
|
|
||||||
|
|
||||||
|
|
||||||
; constants
|
|
||||||
|
|
||||||
; events
|
|
||||||
EV_IDLE = 0
|
|
||||||
EV_TIMER = 0
|
|
||||||
EV_REDRAW = 1
|
|
||||||
EV_KEY = 2
|
|
||||||
EV_BUTTON = 3
|
|
||||||
EV_EXIT = 4
|
|
||||||
EV_BACKGROUND = 5
|
|
||||||
EV_MOUSE = 6
|
|
||||||
EV_IPC = 7
|
|
||||||
EV_STACK = 8
|
|
||||||
|
|
||||||
; event mask bits for function 40
|
|
||||||
EVM_REDRAW = 1b
|
|
||||||
EVM_KEY = 10b
|
|
||||||
EVM_BUTTON = 100b
|
|
||||||
EVM_EXIT = 1000b
|
|
||||||
EVM_BACKGROUND = 10000b
|
|
||||||
EVM_MOUSE = 100000b
|
|
||||||
EVM_IPC = 1000000b
|
|
||||||
EVM_STACK = 10000000b
|
|
@ -1,513 +0,0 @@
|
|||||||
; <--- description --->
|
|
||||||
; compiler: FASM 1.67.23
|
|
||||||
; name: Mouse Emulation For KolibriOS
|
|
||||||
; 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:
|
|
||||||
|
|
||||||
;set an waiting mask
|
|
||||||
mcall 40,10b
|
|
||||||
|
|
||||||
|
|
||||||
wait_event_one:
|
|
||||||
|
|
||||||
call checkspeed
|
|
||||||
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,3
|
|
||||||
int 0x40
|
|
||||||
test eax,0x80
|
|
||||||
jnz wait_event_two
|
|
||||||
|
|
||||||
cmp ebp,1
|
|
||||||
je unset_hotkeys
|
|
||||||
|
|
||||||
|
|
||||||
mov eax,5
|
|
||||||
mov ebx,10
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
jmp wait_event_one
|
|
||||||
|
|
||||||
|
|
||||||
wait_event_two:
|
|
||||||
cmp ebp,0
|
|
||||||
je set_hotkeys
|
|
||||||
mov ebp,1
|
|
||||||
mov eax,10
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
cmp eax, 2 ; if event == 2
|
|
||||||
jmp key ; jump to key handler
|
|
||||||
|
|
||||||
jmp wait_event_one ; else return to the start of main cycle
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
key: ; key event handler
|
|
||||||
mov eax, 2 ; get key code
|
|
||||||
int 0x40
|
|
||||||
cmp al,2
|
|
||||||
je mousewriteli
|
|
||||||
jmp wait_event_one
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
set_hotkeys:
|
|
||||||
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,4
|
|
||||||
mov cl,79d
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,4
|
|
||||||
mov cl,80
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,4
|
|
||||||
mov cl,81
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,4
|
|
||||||
mov cl,75
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,4
|
|
||||||
mov cl,76
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,4
|
|
||||||
mov cl,77
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,4
|
|
||||||
mov cl,71
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,4
|
|
||||||
mov cl,72
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,4
|
|
||||||
mov cl,73
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
|
|
||||||
mov ebp,1
|
|
||||||
|
|
||||||
jmp wait_event_two
|
|
||||||
|
|
||||||
|
|
||||||
unset_hotkeys:
|
|
||||||
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,5
|
|
||||||
mov cl,79
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,5
|
|
||||||
mov cl,80
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,5
|
|
||||||
mov cl,81
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,5
|
|
||||||
mov cl,75
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,5
|
|
||||||
mov cl,76
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,5
|
|
||||||
mov cl,77
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,5
|
|
||||||
mov cl,71
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,5
|
|
||||||
mov cl,72
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,5
|
|
||||||
mov cl,73
|
|
||||||
mov edx,0
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
|
|
||||||
xor ebp,ebp
|
|
||||||
|
|
||||||
jmp wait_event_one
|
|
||||||
|
|
||||||
checkspeed:
|
|
||||||
mov eax,18
|
|
||||||
mov ebx,19
|
|
||||||
xor ecx,ecx
|
|
||||||
int 0x40
|
|
||||||
mov esi,eax
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
mouseread:
|
|
||||||
|
|
||||||
;numchecking
|
|
||||||
mov eax,66
|
|
||||||
mov ebx,3
|
|
||||||
int 0x40
|
|
||||||
test eax,0x80
|
|
||||||
jz wait_event_one
|
|
||||||
|
|
||||||
;mousereading
|
|
||||||
mov eax,37
|
|
||||||
mov ebx,0
|
|
||||||
int 0x40
|
|
||||||
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
|
|
||||||
|
|
||||||
nullli:
|
|
||||||
add ebx,16
|
|
||||||
cmp ebx,65535
|
|
||||||
jg xmin
|
|
||||||
sub ebx,15
|
|
||||||
|
|
||||||
add edi,16
|
|
||||||
cmp edi,65535
|
|
||||||
jg ymin
|
|
||||||
sub edi,15
|
|
||||||
|
|
||||||
razr:
|
|
||||||
mov eax,14
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
|
|
||||||
mov ecx,eax
|
|
||||||
shr eax,16 ; get x2
|
|
||||||
shl ecx,16 ; get y2
|
|
||||||
shr ecx,16
|
|
||||||
|
|
||||||
rightdownli:
|
|
||||||
cmp eax,ebx
|
|
||||||
jl xmax
|
|
||||||
cmp ecx,edi
|
|
||||||
jl ymax
|
|
||||||
|
|
||||||
|
|
||||||
mousewrite:
|
|
||||||
mov eax,18
|
|
||||||
mov ebx,19
|
|
||||||
mov ecx,4
|
|
||||||
int 0x40
|
|
||||||
jmp wait_event_one
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mousewriteli:
|
|
||||||
cmp ah,79
|
|
||||||
je keyone
|
|
||||||
cmp ah,80
|
|
||||||
je keytwo
|
|
||||||
cmp ah,81
|
|
||||||
je keythree
|
|
||||||
cmp ah,75
|
|
||||||
je keyfour
|
|
||||||
cmp ah,77
|
|
||||||
je keysix
|
|
||||||
cmp ah,71
|
|
||||||
je keyseven
|
|
||||||
cmp ah,72
|
|
||||||
je keyeight
|
|
||||||
cmp ah,73
|
|
||||||
je keynine
|
|
||||||
cmp ah,76
|
|
||||||
je keyfive
|
|
||||||
|
|
||||||
jmp wait_event_one
|
|
||||||
|
|
||||||
|
|
||||||
;how_much_time:
|
|
||||||
;mov eax,26
|
|
||||||
;mov ebx,9
|
|
||||||
;int 0x40
|
|
||||||
;push eax
|
|
||||||
;ret
|
|
||||||
|
|
||||||
|
|
||||||
;oldkeyvsyakoe!
|
|
||||||
;incesi:
|
|
||||||
;inc esi
|
|
||||||
;ret
|
|
||||||
|
|
||||||
;nullesi:
|
|
||||||
;xor esi, esi
|
|
||||||
;ret
|
|
||||||
|
|
||||||
|
|
||||||
;oldkey:
|
|
||||||
;cmp ah, bh
|
|
||||||
;je incesi
|
|
||||||
;cmp ah, bh
|
|
||||||
;jne nullesi
|
|
||||||
;ret
|
|
||||||
|
|
||||||
|
|
||||||
keyone:
|
|
||||||
|
|
||||||
;call oldkey
|
|
||||||
xor edx,edx
|
|
||||||
call left
|
|
||||||
call down
|
|
||||||
xor ah,ah
|
|
||||||
mov bh,79
|
|
||||||
jmp mouseread
|
|
||||||
|
|
||||||
keytwo:
|
|
||||||
|
|
||||||
;call oldkey
|
|
||||||
xor edx,edx
|
|
||||||
call down
|
|
||||||
call down
|
|
||||||
xor ah,ah
|
|
||||||
mov bh,80
|
|
||||||
jmp mouseread
|
|
||||||
|
|
||||||
keythree:
|
|
||||||
|
|
||||||
;call oldkey
|
|
||||||
xor edx,edx
|
|
||||||
call right
|
|
||||||
call down
|
|
||||||
xor ah,ah
|
|
||||||
mov bh,81
|
|
||||||
jmp mouseread
|
|
||||||
|
|
||||||
keyfour:
|
|
||||||
|
|
||||||
;call oldkey
|
|
||||||
xor edx,edx
|
|
||||||
call left
|
|
||||||
call left
|
|
||||||
xor ah,ah
|
|
||||||
mov bh,75
|
|
||||||
jmp mouseread
|
|
||||||
|
|
||||||
keysix:
|
|
||||||
|
|
||||||
;call oldkey
|
|
||||||
xor edx,edx
|
|
||||||
call right
|
|
||||||
call right
|
|
||||||
xor ah,ah
|
|
||||||
mov bh,77
|
|
||||||
jmp mouseread
|
|
||||||
|
|
||||||
keyseven:
|
|
||||||
|
|
||||||
;call oldkey
|
|
||||||
xor edx,edx
|
|
||||||
call left
|
|
||||||
call up
|
|
||||||
xor ah,ah
|
|
||||||
mov bh,71
|
|
||||||
jmp mouseread
|
|
||||||
|
|
||||||
keyeight:
|
|
||||||
|
|
||||||
;call oldkey
|
|
||||||
xor edx,edx
|
|
||||||
call up
|
|
||||||
call up
|
|
||||||
xor ah,ah
|
|
||||||
mov bh,72
|
|
||||||
jmp mouseread
|
|
||||||
|
|
||||||
keynine:
|
|
||||||
|
|
||||||
;call oldkey
|
|
||||||
xor edx,edx
|
|
||||||
call right
|
|
||||||
call up
|
|
||||||
xor ah,ah
|
|
||||||
mov bh,73
|
|
||||||
jmp mouseread
|
|
||||||
|
|
||||||
keyfive:
|
|
||||||
|
|
||||||
mcall 18, 19, 5, 1
|
|
||||||
mov eax,5
|
|
||||||
mov ebx,1
|
|
||||||
int 0x40
|
|
||||||
mcall 18, 19, 5, 0
|
|
||||||
jmp wait_event_one
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
left:
|
|
||||||
mov eax,esi
|
|
||||||
|
|
||||||
leftstart:
|
|
||||||
dec eax
|
|
||||||
sub edx,65536
|
|
||||||
cmp eax,0
|
|
||||||
ja leftstart
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
right:
|
|
||||||
mov eax,esi
|
|
||||||
|
|
||||||
rightstart:
|
|
||||||
dec eax
|
|
||||||
add edx,65536
|
|
||||||
cmp eax,0
|
|
||||||
ja rightstart
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
down:
|
|
||||||
mov eax,esi
|
|
||||||
|
|
||||||
downstart:
|
|
||||||
dec eax
|
|
||||||
add edx,1
|
|
||||||
cmp eax,0
|
|
||||||
ja downstart
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
up:
|
|
||||||
mov eax,esi
|
|
||||||
|
|
||||||
upstart:
|
|
||||||
dec eax
|
|
||||||
sub edx,1
|
|
||||||
cmp eax,0
|
|
||||||
ja upstart
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; <--- initialised data --->
|
|
||||||
DATA
|
|
||||||
|
|
||||||
|
|
||||||
; <--- uninitialised data --->
|
|
||||||
UDATA
|
|
||||||
|
|
||||||
|
|
||||||
MEOS_APP_END
|
|
||||||
; <--- end of KolibriOS application --->
|
|
||||||
; ZG
|
|
274
programs/system/mousemul/trunk/mousemul.asm
Normal file
274
programs/system/mousemul/trunk/mousemul.asm
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
; <--- description --->
|
||||||
|
; compiler: FASM 1.67.23
|
||||||
|
; name: Mouse Emulation For KolibriOS
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; 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:
|
||||||
|
xor ebx,ebx
|
||||||
|
mcall 40
|
||||||
|
@@:
|
||||||
|
mcall 23,10
|
||||||
|
|
||||||
|
mcall 66,3
|
||||||
|
test eax,0x80
|
||||||
|
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
|
||||||
|
pop eax
|
||||||
|
jnz @f
|
||||||
|
mov ebx,5
|
||||||
|
call hotkeys_common
|
||||||
|
jmp start
|
||||||
|
@@:
|
||||||
|
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
|
||||||
|
ret
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; <--- initialised data --->
|
||||||
|
DATA
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; <--- uninitialised data --->
|
||||||
|
UDATA
|
||||||
|
mouse_timer_ticks dd 0
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
MEOS_APP_END
|
||||||
|
; <--- end of KolibriOS application --->
|
||||||
|
; ZG
|
Loading…
Reference in New Issue
Block a user