Subversion Repositories Kolibri OS

Rev

Rev 2687 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1601 mario79 1
; <--- description --->
2
; compiler:     FASM 1.67.23
3
; name:         Mouse Emulation For KolibriOS
4
;-----------------------------------------------------------------------------
5
; version:	1.0
6
; last update:  04/09/2010
7
; written by:   Marat Zakiyanov aka Mario79, aka Mario
8
; changes:      total optimization of code,
9
;               different events for Up and Down of key Num 5
10
;               advansed acceleration mode
11
;-----------------------------------------------------------------------------
12
; version:      0.8
13
; last update:  03/10/2007
14
; written by:   Zlobny_Gluk
15
; e-mail:       umbrosia@land.ru
16
;-----------------------------------------------------------------------------
17
; <--- include all KolibriOS stuff --->
18
;include "lang.inc"
19
include '../../../macros.inc'
20
 
21
; <--- start of KolibriOS application --->
22
MEOS_APP_START
23
 
24
; <--- start of code --->
25
CODE
26
;-----------------------------------------------------------------------------
27
start:
28
	xor	ebx,ebx
29
	mcall	40
30
@@:
31
	mcall	23,10
32
 
33
	mcall	66,3
34
	test	eax,0x80
35
	jz	@r
36
 
37
	mov	ebx,4
38
	call	hotkeys_common
39
 
40
	mcall	40,10b
41
still:
42
	mcall	10
43
 
44
	cmp	eax,2		; if event == 2
45
	jne	still
46
;-----------------------------------------------------------------------------
47
key:				   ; key event handler
48
	call	mouse_acceleration
49
 
50
	mcall	2		   ; get key code
51
 
52
	push	eax
53
	mcall	66,3
54
	test	eax,0x80
55
	pop	eax
56
	jnz	@f
57
	mov	ebx,5
58
	call	hotkeys_common
59
	jmp	start
60
@@:
61
	cmp	al,2
62
	jne	still
63
 
64
	xor	edx,edx
65
 
66
	cmp	ah,80	; Down Num 2
67
	je	keytwo
68
	cmp	ah,81	; Down Num 3
69
	je	keythree
70
	cmp	ah,75	; Down Num 4
71
	je	keyfour
72
	cmp	ah,77	; Down Num 6
73
	je	keysix
74
	cmp	ah,71	; Down Num 7
75
	je	keyseven
76
	cmp	ah,72	; Down Num 8
77
	je	keyeight
78
	cmp	ah,73	; Down Num 9
79
	je	keynine
80
	cmp	ah,76	; Down Num 5
81
	je	keyfive
82
	cmp	ah,204	; Up Num 5
83
	je	keyfive_1
84
	cmp	ah,79	; Down Num 1
85
	jne	still
86
;-----------------------------------------------------------------------------
87
keyone:
88
	call	down
89
keyfour:
90
	call	left
91
	jmp	mouseread
92
;-----------------------------------------------------------------------------
93
keythree:
94
	call	right
95
keytwo:
96
	call	down
97
	jmp	mouseread
98
;-----------------------------------------------------------------------------
99
keyseven:
100
	call	left
101
keyeight:
102
	call	up
103
	jmp	mouseread
104
;-----------------------------------------------------------------------------
105
keynine:
106
	call	up
107
keysix:
108
	call	right
109
	jmp	mouseread
110
;-----------------------------------------------------------------------------
111
keyfive:
112
	inc	edx
113
keyfive_1:
114
	mcall	18,19,5
115
	jmp	still
116
;-----------------------------------------------------------------------------
117
left:
118
	mov	eax,esi
119
	shl	eax,16
120
	sub	edx,eax
121
	ret
122
;-----------------------------------------------------------------------------
123
right:
124
	mov	eax,esi
125
	shl	eax,16
126
	add	edx,eax
127
	ret
128
;-----------------------------------------------------------------------------
129
down:
130
	add	edx,esi
131
	ret
132
;-----------------------------------------------------------------------------
133
up:
134
	sub	edx,esi
135
	ret
136
;-----------------------------------------------------------------------------
137
mouseread:
138
	xor	ebx,ebx
139
	mcall	37
140
	add	edx,eax
141
 
142
sravn:
143
	xor	ebx,ebx
144
	xor	edi,edi
145
 
146
real:
147
	mov	ebx,edx
148
	mov	edi,ebx
149
	shr	ebx,16 ; get x1
150
;	shl	edi,16 ; get y1
151
;	shr	edi,16
152
	and	edi,0xffff
153
 
154
nullli:
155
	add	ebx,16
156
	cmp	ebx,65535
157
	jg	xmin
158
	sub	ebx,15
159
 
160
	add	edi,16
161
	cmp	edi,65535
162
	jg	ymin
163
	sub	edi,15
164
 
165
razr:
166
	mcall	14
167
 
168
	mov	ecx,eax
169
	shr	eax,16 ; get x2
170
;	shl	ecx,16 ; get y2
171
;	shr	ecx,16
172
	and	ecx,0xffff
173
 
174
rightdownli:
175
	cmp	eax,ebx
176
	jl	xmax
177
	cmp	ecx,edi
178
	jl	ymax
179
 
180
mousewrite:
181
	mcall	18,19,4
182
	mcall	26,9
183
	mov	[mouse_timer_ticks],eax
184
	jmp	still
185
;-----------------------------------------------------------------------------
186
mouse_acceleration:
187
	xor	esi,esi
188
	inc	esi
189
	mcall	18,19,2
190
	mov	ecx,eax
191
	mcall	26,9
192
	sub	eax,[mouse_timer_ticks]
193
	cmp	eax,ecx  ; mouse_delay
194
	ja	@f
195
	xor	ecx,ecx
196
	mcall	18,19	; checkspeed
197
	mov	esi,eax
198
	shl	esi,2
199
@@:
200
	ret
201
;-----------------------------------------------------------------------------
202
xmax:
203
	dec	eax
204
	dec	ebx
205
	dec	edi
206
	shl	eax,16
207
	add	edi,eax
208
	mov	edx,edi
209
	jmp	sravn
210
;-----------------------------------------------------------------------------
211
xmin:
212
	mov	edx,edi
213
	jmp	sravn
214
;-----------------------------------------------------------------------------
215
ymax:
216
	dec	ecx
217
	dec	ebx
218
 
219
	shl	ebx,16
220
	mov	edi,ebx
221
	add	edi,ecx
222
	mov	edx,edi
223
	jmp	sravn
224
;-----------------------------------------------------------------------------
225
ymin:
226
	shl	ebx,16
227
	mov	edx,ebx
228
	shr	ebx,16
229
	jmp	sravn
230
;-----------------------------------------------------------------------------
231
hotkeys_common:
232
	xor	ecx,ecx
233
	xor	edx,edx
234
	mov	cl,79	; Down Num 1
235
	mcall	66
236
 
237
	mov	cl,80	; Down Num 2
238
	mcall	66
239
 
240
	mov	cl,81	; Down Num 3
241
	mcall	66
242
 
243
	mov	cl,75	; Down Num 4
244
	mcall	66
245
 
246
	mov	cl,76	; Down Num 5
247
	mcall	66
248
 
249
	mov	cl,204 ; Up Num 5
250
	mcall	66
251
 
252
	mov	cl,77	; Down Num 6
253
	mcall	66
254
 
255
	mov	cl,71	; Down Num 7
256
	mcall	66
257
 
258
	mov	cl,72	; Down Num 8
259
	mcall	66
260
 
261
	mov	cl,73	; Down Num 9
262
	mcall	66
263
	ret
264
;-----------------------------------------------------------------------------
265
; <--- initialised data --->
266
DATA
267
;-----------------------------------------------------------------------------
268
; <--- uninitialised data --->
269
UDATA
270
mouse_timer_ticks	dd 0
271
;-----------------------------------------------------------------------------
272
MEOS_APP_END
273
; <--- end of KolibriOS application --->
274
; ZG