Subversion Repositories Kolibri OS

Rev

Rev 7416 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7416 Rev 7436
Line 1... Line 1...
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
; Hot Angles ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
; Hot Angles ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4
; Compile with FASM
4
; Compile with FASM
5
; Version 0.3.3: Sep 25, 2018
5
; Version 0.3.5: Oct 5, 2018
Line 6... Line 6...
6
 
6
 
7
; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage
7
; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage
8
; All rights reserved.
8
; All rights reserved.
9
; Redistribution and use in source and binary forms, with or without modification,
9
; Redistribution and use in source and binary forms, with or without modification,
Line 46... Line 46...
46
 
46
 
47
START_DEBUG:
47
START_DEBUG:
48
   call copyKill         ;ïðîñòåéøàÿ çàùèòà îò ïîâòîðíîãî çàïóñêà
48
   call copyKill         ;ïðîñòåéøàÿ çàùèòà îò ïîâòîðíîãî çàïóñêà
49
   mcall  68, 11         ;èíèöèàëèçàöèÿ êó÷è
49
   mcall  68, 11         ;èíèöèàëèçàöèÿ êó÷è
-
 
50
   call loadConfig       ;çàãðóæàåì êîíôèãóðàöèþ ïðèëîæåíèÿ
-
 
51
 
-
 
52
   cmp byte[mode], 0     ;ôóíêöèÿ îòêëþ÷åíà - âûõîä
-
 
53
   jne @f
-
 
54
   mcall -1
-
 
55
@@:
-
 
56
   ;ðåæèì àêòèâàöèè ãîðÿ÷åé êëàâèøåé?
-
 
57
   cmp byte[mode], 2 ;ïîäïèñûâàåìñÿ íà èíòåðåñíûå íàì ñîáûòèÿ â çàâèñèìîñòè îò ðåæèìà ðàáîòû
50
   call loadConfig       ;çàãðóæàåì êîíôèãóðàöèþ ïðèëîæåíèÿ
58
   jne @f
51
   mov ebx, 00000100000000000000000000100000b ;ïîäïèñûâàåìñÿ íà èíòåðåñíûå íàì ñîáûòèÿ
59
   mov ebx, 00000100000000000000000000100010b    ;åñëè äà, òî ïîäïèñûâàåìñÿ íà êëàâèøè
-
 
60
   mcall 40
-
 
61
   jmp init02
-
 
62
@@:
-
 
63
   ; âî âñåõ îñòàëüíûõ ñëó÷àÿõ - êëàññè÷åñêèé ðåæèì ðàáîòû
-
 
64
   ;mode=1 êëàññè÷åñêèé ðåæèì ðàáîòû - ðåàêöèÿ ïðè íàâåäåíèè â óãîë
-
 
65
   mov byte[mode], 1
-
 
66
   mov ebx, 00000100000000000000000000100000b
-
 
67
   mcall 40
-
 
68
   jmp init01
-
 
69
 
-
 
70
 
-
 
71
 
-
 
72
init02:
-
 
73
   mov dword[backAdr], mode02
-
 
74
   call setHotKey
-
 
75
mode02:
-
 
76
   mcall 10
-
 
77
   cmp eax, 2     ;îáðàáîòêà íàæàòèÿ êëàâèøè
-
 
78
   je hotkey
-
 
79
 
-
 
80
   cmp byte[keyState], 0
-
 
81
   je mode02
-
 
82
   cmp   eax, 6   ;îáðàáîòêà ïåðåìåùåíèé è íàæàòèÿ ìûøè
-
 
83
   je    mouse
-
 
84
 
-
 
85
   jmp mode02
-
 
86
 
-
 
87
 
-
 
88
setHotKey:    ;óñòàíîâèòü ãîðÿ÷óþ êëàâèøó
-
 
89
   push eax ebx ecx edx
-
 
90
   xor ecx, ecx
-
 
91
   mov cl, byte[keyActivate]  ;íàæàòèå ãîðÿ÷åé êëàâèøè
-
 
92
   mov edx, 0x000
-
 
93
   mcall 66, 4, ecx, edx
-
 
94
 
-
 
95
   ;mov cl, byte[keyActivate]
-
 
96
   add cl, 128              ;îòïóñêàíèå ãîðÿ÷åé êëàâèøè
-
 
97
   ;mov edx, 0x000
-
 
98
   mcall 66, 4, ecx, edx
-
 
99
   pop edx ecx ebx eax
-
 
100
   ret
-
 
101
 
-
 
102
 
-
 
103
hotkey:
-
 
104
   mcall 2
-
 
105
   cmp eax, 1     ;áóôåð êëàâèø ïóñò?
-
 
106
   je hotkey.end
-
 
107
 
-
 
108
   cmp al, 2      ;íàñ èíòåðåñóåò òîëüêî ñêàí êîä ãîðÿ÷åé êëàâèøè, èíà÷å âûõîäèì
Line -... Line 109...
-
 
109
   jne hotkey.end
-
 
110
 
-
 
111
   cmp ah, byte[keyActivate]   ;åñëè íàæàòà íàøà ãîðÿ÷àÿ êëàâèøà
-
 
112
   jne @f
-
 
113
   mov byte[keyState], 1
-
 
114
   mov byte[state], UNLOCKd
-
 
115
   jmp hotkey.end
-
 
116
@@:
-
 
117
   push edx
-
 
118
   xor edx, edx
-
 
119
   mov dl, byte[keyActivate]
-
 
120
   add dl, 128
-
 
121
   cmp ah, dl   ;åñëè îòïóùåíà íàøà ãîðÿ÷àÿ êëàâèøà
-
 
122
   jne @f       ;hotkey.end
-
 
123
   ;mov ecx, 0  ;ñòðîêè äëÿ îòëàäêè è òåñòà
-
 
124
   ;call run_command
-
 
125
   mov byte[keyState], 0
-
 
126
   mov byte[state], LOCKd
52
   mcall 40
127
@@:
-
 
128
   pop edx
-
 
129
.end:
-
 
130
   jmp mode02
-
 
131
 
-
 
132
 
-
 
133
init01:
53
 
134
   mov dword[backAdr], mode01
54
START:
135
mode01:
Line 55... Line 136...
55
  mov     eax, 10                 ; function 10 : wait until event
136
  mov     eax, 10                 ; function 10 : wait until event
56
  mcall                           ; event type is returned in eax
137
  mcall                           ; event type is returned in eax
Line 57... Line 138...
57
 
138
 
-
 
139
  cmp   eax, 6           ;îáðàáîòêà ïåðåìåùåíèé è íàæàòèÿ ìûøè
Line 58... Line 140...
58
  cmp   eax, 6           ;îáðàáîòêà ïåðåìåùåíèé è íàæàòèÿ ìûøè
140
  je    mouse
59
  je    mouse
141
 
60
 
142
  jmp mode01
-
 
143
 
Line 61... Line 144...
61
  jmp START
144
 
62
 
145
mouse:
63
mouse:
146
   push ebx
64
  ;îñíîâíîé öèêë ïðîãðàììû
147
   mcall 37, 0   ;ïîëó÷àåì òåêóùèå êîîðäèíàòû ìûøè
65
  call get_mouse_pos ;ïîëó÷àåì òåêóùèå êîîðäèíàòû ìûøè
148
   pop ebx
66
 
149
 
67
  cmp eax, 0 ;ëåâûé âåðõíèé óãîë
150
  cmp eax, 0 ;ëåâûé âåðõíèé óãîë
Line 68... Line 151...
68
  jne @f
151
  jne @f
69
  ; -- çäåñü âûçûâàåì ñîîòâ. âûçîâ äëÿ ëåâîãî âåðõíåãî óãëà  (X=0, Y=0)
152
  ; -- çäåñü âûçûâàåì ñîîòâ. âûçîâ äëÿ ëåâîãî âåðõíåãî óãëà  (X=0, Y=0)
70
  push ecx
153
  push ecx
Line 71... Line 154...
71
  mov ecx, 0
154
  mov ecx, 0
72
  call run_command
155
  call run_command
Line 89... Line 172...
89
  push ecx
172
  push ecx
90
  mov ecx, 2
173
  mov ecx, 2
91
  call run_command
174
  call run_command
92
  pop ecx
175
  pop ecx
Line 93... Line 176...
93
 
176
 
94
  jmp START
177
  jmp dword[backAdr]
95
Ytrue:
178
Ytrue:
96
  ;åñëè Y ðàâíû, òî íàñ èíòåðåñóåò X=0 (ëåâûé íèæíèé óãîë) èëè X=ScreenWidth (ïðàâûé íèæíèé)
179
  ;åñëè Y ðàâíû, òî íàñ èíòåðåñóåò X=0 (ëåâûé íèæíèé óãîë) èëè X=ScreenWidth (ïðàâûé íèæíèé)
97
  shr eax, 16
180
  shr eax, 16
98
  cmp ax, 0
181
  cmp ax, 0
99
  jne @f
182
  jne @f
100
  ; -- X=0, Y = Height  (ëåâûé íèæíèé óãîë)
183
  ; -- X=0, Y = Height  (ëåâûé íèæíèé óãîë)
101
  push ecx
184
  push ecx
102
  mov ecx, 1
185
  mov ecx, 1
103
  call run_command
186
  call run_command
104
  pop ecx
187
  pop ecx
105
  jmp START
188
  jmp dword[backAdr]
106
@@:
189
@@:
107
  cmp ax, word[screen.width]
190
  cmp ax, word[screen.width]
108
  jne unlockend
191
  jne unlockend
109
  ; -- (ïðàâûé íèæíèé óãîë)
192
  ; -- (ïðàâûé íèæíèé óãîë)
110
  push ecx
193
  push ecx
111
  mov ecx, 3
194
  mov ecx, 3
112
  call run_command
195
  call run_command
Line 113... Line 196...
113
  pop ecx
196
  pop ecx
Line 114... Line 197...
114
 
197
 
115
  jmp START
198
  jmp dword[backAdr]
116
 
199
 
-
 
200
unlockend:
Line 117... Line -...
117
unlockend:
-
 
118
  mov byte[state], UNLOCKd
-
 
119
  jmp START
-
 
120
 
-
 
121
 
201
  mov byte[state], UNLOCKd
122
;ñòðóêòóðêà äàííûõ äëÿ õðàíåíèÿ ïàðàìåòðîâ ýêðàíà
202
  jmp dword[backAdr]
123
screen:
203
 
124
   .width  dw 0
204
 
125
   .height dw 0
205
 
Line 134... Line 214...
134
   mov word[screen.width], ax
214
   mov word[screen.width], ax
135
   pop eax
215
   pop eax
136
   ret
216
   ret
Line 137... Line -...
137
 
-
 
138
 
-
 
139
;ïîëó÷èòü ïîçèöèþ ìûøè
-
 
140
get_mouse_pos:
-
 
141
   ;push eax
-
 
142
   push ebx
-
 
143
   mcall 37, 0
-
 
144
   pop ebx
217
 
Line 145... Line 218...
145
   ;pop eax
218
 
146
   ret
219
 
147
 
220
 
148
 
221
 
Line 149... Line -...
149
;çàïóñê ïðèëîæåíèÿ: ecx - àêòèâíûé óãîë: lu=0, ld=1, ru=2, rd=3
-
 
150
run_command:
222
;çàïóñê ïðèëîæåíèÿ: ecx - àêòèâíûé óãîë: lu=0, ld=1, ru=2, rd=3
151
   cmp byte[state], UNLOCKd
223
run_command:
Line -... Line 224...
-
 
224
   cmp byte[state], UNLOCKd
Line 152... Line 225...
152
   jne run_command.end
225
   jne run_command.end
153
 
226
 
154
   push eax
227
;   cmp byte[mode], 2     ;åñëè ðåæèì âòîðîé
155
   push ebx
228
;   jne @f
156
   push ecx
229
 
157
 
230
   push eax ebx ecx
158
 
231
 
159
   cmp ecx, 0
232
   cmp ecx, 0
Line 194... Line 267...
194
;êîíåö êîäà äëÿ çàìåíû
267
;êîíåö êîäà äëÿ çàìåíû
Line 195... Line 268...
195
 
268
 
196
   mcall 70, struct70
269
   mcall 70, struct70
197
@@:
270
@@:
-
 
271
   mov byte[state], LOCKd
Line 198... Line -...
198
   mov byte[state], LOCKd
-
 
199
 
-
 
200
   pop ecx
272
   ;mov byte[keyState], 0
201
   pop ebx
273
 
202
   pop eax
274
   pop ecx ebx eax
Line 203... Line 275...
203
.end:
275
.end:
204
   ret
276
   ret
Line 209... Line 281...
209
  .param_adr  dd 0 ; óêàçàòåëü íà ASCIIZ-ñòðîêó ñ ïàðàìåòðàìè
281
  .param_adr  dd 0 ; óêàçàòåëü íà ASCIIZ-ñòðîêó ñ ïàðàìåòðàìè
210
  .other      dd 0, 0
282
  .other      dd 0, 0
211
  .path       db 0 ; "/rd/1/TINYPAD",0 ; ïóòü
283
  .path       db 0 ; "/rd/1/TINYPAD",0 ; ïóòü
212
  .path_adr   dd 0 ;testData.lu
284
  .path_adr   dd 0 ;testData.lu
Line 213... Line -...
213
 
-
 
214
 
-
 
215
state: db 0 ; 0=unlock, 1=lock
-
 
216
mode: db 0  ;ðåæèì ðàáîòû (äëÿ áóäóùåãî ðàñøèðåíèÿ ôóíêöèîíàëà)
-
 
217
 
-
 
218
;testData:
-
 
219
;  .lu db '/rd/1/SHELL', 0
-
 
220
;  .ld db '/rd/1/RUN', 0
-
 
221
;  .ru db "/rd/1/TINYPAD", 0
-
 
222
;  .rd db '/rd/1/File Managers/EOLITE', 0
-
 
223
 
-
 
224
newData:  ;òàáëè÷êà àäðåñîâ êîìàíäíûõ ñòðîê
-
 
225
  .lu dd 0
-
 
226
  .ld dd 0
-
 
227
  .ru dd 0
-
 
228
  .rd dd 0
-
 
229
newDataEnd:
-
 
230
 
285
 
231
;èìÿ êîíôèãóðàöèîííîãî ôàéëà
286
;èìÿ êîíôèãóðàöèîííîãî ôàéëà
Line 232... Line 287...
232
fileName: db 'SETTINGS/HOTANGLES.CFG', 0
287
fileName: db 'SETTINGS/HOTANGLES.CFG', 0
233
 
288
 
Line 240... Line 295...
240
   cmp edx, 0               ;åñëè ôàéë ïóñò, â í¸ì íåò äàííûõ, òî çàâåðøàåì ðàáîòó
295
   cmp edx, 0               ;åñëè ôàéë ïóñò, â í¸ì íåò äàííûõ, òî çàâåðøàåì ðàáîòó
241
   je loadConfig.exit
296
   je loadConfig.exit
Line 242... Line 297...
242
 
297
 
Line -... Line 298...
-
 
298
   add edx, eax             ;èíà÷å êëàä¸ì â edx - àäðåñ êîíöà ôàéëà
243
   add edx, eax             ;èíà÷å êëàä¸ì â edx - àäðåñ êîíöà ôàéëà
299
 
244
 
300
   mov byte[mode], 0
-
 
301
   cmp byte[eax], '0' ;121 ;'y'  ;åñëè ïàðàìåòð àêòèâíîñòè ïðèëîæåíèÿ èìååò ñòàòóñ: íå àêòèâíî
-
 
302
   je loadConfig.exit      ;òî çàâåðøàåì ðàáîòó ïðèëîæåíèÿ
-
 
303
   cmp byte[eax], 110 ;'n'
-
 
304
   je loadConfig.exit
-
 
305
 
-
 
306
   ;èíà÷å âûñòàâëÿåì ðåæèì
-
 
307
   cmp byte[eax], '2'       ;ðåæèì àêòèâàöèè ïî ãîðÿ÷åé êëàâèøå
-
 
308
   jne @f
-
 
309
   mov byte[mode], 2
-
 
310
   jmp loadConfig.modeEnd
-
 
311
@@:
-
 
312
   cmp byte[eax], '3'       ;ðåæèì æåñòà ïðè çàæàòîé êëàâèøå
-
 
313
   jne @f
-
 
314
   mov byte[mode], 3
-
 
315
   jmp loadConfig.modeEnd
-
 
316
@@:
Line 245... Line 317...
245
   cmp byte[eax], 121 ;'y'  ;åñëè ïàðàìåòð àêòèâíîñòè ïðèëîæåíèÿ èìååò ñòàòóñ: íå àêòèâíî
317
   mov byte[mode], 1        ;âî âñåõ îñòàëüíûõ ñëó÷àÿõ - êëàññè÷åñêèé ðåæèì
246
   jne loadConfig.exit      ;òî çàâåðøàåì ðàáîòó ïðèëîæåíèÿ
318
.modeEnd:
247
 
319
 
248
   push edi
320
   push edi
Line 314... Line 386...
314
selfName db '@HOTANGLES',0
386
selfName db '@HOTANGLES',0
315
selfNameSize = 10 ;äî 11 byte
387
selfNameSize = 10 ;äî 11 byte
316
;
388
;
317
compareBytes:
389
compareBytes:
318
   push edi esi ecx ebx
390
   push edi esi ecx ebx
319
   mov eax, 0 ;xor eax, eax
391
   xor eax, eax
320
   mov ecx, selfNameSize    ;max ðàçìåð ñòðîê 11
392
   mov ecx, selfNameSize    ;max ðàçìåð ñòðîê 11
321
@@:
393
@@:
322
   mov bl, byte[edi]
394
   mov bl, byte[edi]
323
   cmp bl, byte[esi]
395
   cmp bl, byte[esi]
324
   jne compareBytes.no
396
   jne compareBytes.no
Line 332... Line 404...
332
   mov eax, 1
404
   mov eax, 1
333
@@:
405
@@:
334
   pop ebx ecx esi edi
406
   pop ebx ecx esi edi
335
   ret
407
   ret
336
;
408
;
337
slotMax dd 0
-
 
338
selfPID dd 0
-
 
339
buf db 1024 dup(0)
-
 
340
copyKill:
409
copyKill:
341
   push eax ebx ecx esi edi
410
   push eax ebx ecx esi edi
Line 342... Line 411...
342
 
411
 
343
   ;ñïåðâà ïðî÷ò¸ì ñâîþ èíôîðìàöèþ
412
   ;ñïåðâà ïðî÷ò¸ì ñâîþ èíôîðìàöèþ
Line 378... Line 447...
378
@@:
447
@@:
379
   pop edi esi ecx ebx eax
448
   pop edi esi ecx ebx eax
380
   ret
449
   ret
Line -... Line 450...
-
 
450
 
-
 
451
 
-
 
452
keyActivate db 41 ;16 ;'Q' ;êëàâèøà àêòèâàöèè
-
 
453
keyState db 0 ;0-êëàâèøà íå àêòèâíà, 1 - êëàâèøà àêòèâíà
-
 
454
 
-
 
455
backAdr rd 1 ;dd 0 ; àäðåñ äëÿ âîçâðàòà èç ïðîâåðêè ìûøè
-
 
456
 
-
 
457
;slotMax dd 0
-
 
458
;selfPID dd 0
-
 
459
;buf db 1024 dup(0)
-
 
460
slotMax rd 1
-
 
461
selfPID rd 1
-
 
462
buf rb 1024
-
 
463
 
-
 
464
;ñòðóêòóðêà äàííûõ äëÿ õðàíåíèÿ ïàðàìåòðîâ ýêðàíà
-
 
465
screen:
-
 
466
  .width  rw 1 ;dw 0
-
 
467
  .height rw 1 ;dw 0
-
 
468
 
-
 
469
state: rb 1  ;ñîñòîÿíèå: 0=unlock, 1=lock
-
 
470
mode:  rb 1  ;ðåæèì ðàáîòû ïðèëîæåíèÿ: 0=íå ðàáîòàåò, 1=êëàññè÷åñêèé, 2=ïî ãîðÿ÷åé êëàâèøå
-
 
471
 
-
 
472
newData:  ;òàáëè÷êà àäðåñîâ êîìàíäíûõ ñòðîê
-
 
473
  .lu rd 1
-
 
474
  .ld rd 1
-
 
475
  .ru rd 1
Line 381... Line 476...
381
 
476
  .rd rd 1