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 |