2,7 → 2,7 |
; Hot Angles ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; Compile with FASM |
; Version 0.3.3: Sep 25, 2018 |
; Version 0.3.5: Oct 5, 2018 |
|
; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage |
; All rights reserved. |
48,10 → 48,91 |
call copyKill ;ïðîñòåéøàÿ çàùèòà îò ïîâòîðíîãî çàïóñêà |
mcall 68, 11 ;èíèöèàëèçàöèÿ êó÷è |
call loadConfig ;çàãðóæàåì êîíôèãóðàöèþ ïðèëîæåíèÿ |
mov ebx, 00000100000000000000000000100000b ;ïîäïèñûâàåìñÿ íà èíòåðåñíûå íàì ñîáûòèÿ |
|
cmp byte[mode], 0 ;ôóíêöèÿ îòêëþ÷åíà - âûõîä |
jne @f |
mcall -1 |
@@: |
;ðåæèì àêòèâàöèè ãîðÿ÷åé êëàâèøåé? |
cmp byte[mode], 2 ;ïîäïèñûâàåìñÿ íà èíòåðåñíûå íàì ñîáûòèÿ â çàâèñèìîñòè îò ðåæèìà ðàáîòû |
jne @f |
mov ebx, 00000100000000000000000000100010b ;åñëè äà, òî ïîäïèñûâàåìñÿ íà êëàâèøè |
mcall 40 |
jmp init02 |
@@: |
; âî âñåõ îñòàëüíûõ ñëó÷àÿõ - êëàññè÷åñêèé ðåæèì ðàáîòû |
;mode=1 êëàññè÷åñêèé ðåæèì ðàáîòû - ðåàêöèÿ ïðè íàâåäåíèè â óãîë |
mov byte[mode], 1 |
mov ebx, 00000100000000000000000000100000b |
mcall 40 |
jmp init01 |
|
START: |
|
|
init02: |
mov dword[backAdr], mode02 |
call setHotKey |
mode02: |
mcall 10 |
cmp eax, 2 ;îáðàáîòêà íàæàòèÿ êëàâèøè |
je hotkey |
|
cmp byte[keyState], 0 |
je mode02 |
cmp eax, 6 ;îáðàáîòêà ïåðåìåùåíèé è íàæàòèÿ ìûøè |
je mouse |
|
jmp mode02 |
|
|
setHotKey: ;óñòàíîâèòü ãîðÿ÷óþ êëàâèøó |
push eax ebx ecx edx |
xor ecx, ecx |
mov cl, byte[keyActivate] ;íàæàòèå ãîðÿ÷åé êëàâèøè |
mov edx, 0x000 |
mcall 66, 4, ecx, edx |
|
;mov cl, byte[keyActivate] |
add cl, 128 ;îòïóñêàíèå ãîðÿ÷åé êëàâèøè |
;mov edx, 0x000 |
mcall 66, 4, ecx, edx |
pop edx ecx ebx eax |
ret |
|
|
hotkey: |
mcall 2 |
cmp eax, 1 ;áóôåð êëàâèø ïóñò? |
je hotkey.end |
|
cmp al, 2 ;íàñ èíòåðåñóåò òîëüêî ñêàí êîä ãîðÿ÷åé êëàâèøè, èíà÷å âûõîäèì |
jne hotkey.end |
|
cmp ah, byte[keyActivate] ;åñëè íàæàòà íàøà ãîðÿ÷àÿ êëàâèøà |
jne @f |
mov byte[keyState], 1 |
mov byte[state], UNLOCKd |
jmp hotkey.end |
@@: |
push edx |
xor edx, edx |
mov dl, byte[keyActivate] |
add dl, 128 |
cmp ah, dl ;åñëè îòïóùåíà íàøà ãîðÿ÷àÿ êëàâèøà |
jne @f ;hotkey.end |
;mov ecx, 0 ;ñòðîêè äëÿ îòëàäêè è òåñòà |
;call run_command |
mov byte[keyState], 0 |
mov byte[state], LOCKd |
@@: |
pop edx |
.end: |
jmp mode02 |
|
|
init01: |
mov dword[backAdr], mode01 |
mode01: |
mov eax, 10 ; function 10 : wait until event |
mcall ; event type is returned in eax |
|
58,11 → 139,13 |
cmp eax, 6 ;îáðàáîòêà ïåðåìåùåíèé è íàæàòèÿ ìûøè |
je mouse |
|
jmp START |
jmp mode01 |
|
|
mouse: |
;îñíîâíîé öèêë ïðîãðàììû |
call get_mouse_pos ;ïîëó÷àåì òåêóùèå êîîðäèíàòû ìûøè |
push ebx |
mcall 37, 0 ;ïîëó÷àåì òåêóùèå êîîðäèíàòû ìûøè |
pop ebx |
|
cmp eax, 0 ;ëåâûé âåðõíèé óãîë |
jne @f |
72,7 → 155,7 |
call run_command |
pop ecx |
|
jmp START ;finish |
jmp dword[backAdr] ;finish |
@@: |
call get_screen_size ;èíà÷å îáíîâëÿåì ðàçìåðû ýêðàíà |
|
91,7 → 174,7 |
call run_command |
pop ecx |
|
jmp START |
jmp dword[backAdr] |
Ytrue: |
;åñëè Y ðàâíû, òî íàñ èíòåðåñóåò X=0 (ëåâûé íèæíèé óãîë) èëè X=ScreenWidth (ïðàâûé íèæíèé) |
shr eax, 16 |
102,7 → 185,7 |
mov ecx, 1 |
call run_command |
pop ecx |
jmp START |
jmp dword[backAdr] |
@@: |
cmp ax, word[screen.width] |
jne unlockend |
112,17 → 195,14 |
call run_command |
pop ecx |
|
jmp START |
jmp dword[backAdr] |
|
unlockend: |
mov byte[state], UNLOCKd |
jmp START |
jmp dword[backAdr] |
|
|
;ñòðóêòóðêà äàííûõ äëÿ õðàíåíèÿ ïàðàìåòðîâ ýêðàíà |
screen: |
.width dw 0 |
.height dw 0 |
|
;ïîëó÷èòü ðàçìåð ýêðàíà |
get_screen_size: |
push eax |
136,29 → 216,22 |
ret |
|
|
;ïîëó÷èòü ïîçèöèþ ìûøè |
get_mouse_pos: |
;push eax |
push ebx |
mcall 37, 0 |
pop ebx |
;pop eax |
ret |
|
|
|
;çàïóñê ïðèëîæåíèÿ: ecx - àêòèâíûé óãîë: lu=0, ld=1, ru=2, rd=3 |
run_command: |
cmp byte[state], UNLOCKd |
jne run_command.end |
|
push eax |
push ebx |
push ecx |
; cmp byte[mode], 2 ;åñëè ðåæèì âòîðîé |
; jne @f |
|
push eax ebx ecx |
|
cmp ecx, 0 |
jne @f |
mov eax, dword[newData.lu] ;testData.lu |
mov eax, dword[newData.lu] |
mov dword[struct70.path_adr], eax |
jmp .end_set_path |
@@: |
196,10 → 269,9 |
mcall 70, struct70 |
@@: |
mov byte[state], LOCKd |
;mov byte[keyState], 0 |
|
pop ecx |
pop ebx |
pop eax |
pop ecx ebx eax |
.end: |
ret |
|
211,23 → 283,6 |
.path db 0 ; "/rd/1/TINYPAD",0 ; ïóòü |
.path_adr dd 0 ;testData.lu |
|
|
state: db 0 ; 0=unlock, 1=lock |
mode: db 0 ;ðåæèì ðàáîòû (äëÿ áóäóùåãî ðàñøèðåíèÿ ôóíêöèîíàëà) |
|
;testData: |
; .lu db '/rd/1/SHELL', 0 |
; .ld db '/rd/1/RUN', 0 |
; .ru db "/rd/1/TINYPAD", 0 |
; .rd db '/rd/1/File Managers/EOLITE', 0 |
|
newData: ;òàáëè÷êà àäðåñîâ êîìàíäíûõ ñòðîê |
.lu dd 0 |
.ld dd 0 |
.ru dd 0 |
.rd dd 0 |
newDataEnd: |
|
;èìÿ êîíôèãóðàöèîííîãî ôàéëà |
fileName: db 'SETTINGS/HOTANGLES.CFG', 0 |
|
242,9 → 297,26 |
|
add edx, eax ;èíà÷å êëàä¸ì â edx - àäðåñ êîíöà ôàéëà |
|
cmp byte[eax], 121 ;'y' ;åñëè ïàðàìåòð àêòèâíîñòè ïðèëîæåíèÿ èìååò ñòàòóñ: íå àêòèâíî |
jne loadConfig.exit ;òî çàâåðøàåì ðàáîòó ïðèëîæåíèÿ |
mov byte[mode], 0 |
cmp byte[eax], '0' ;121 ;'y' ;åñëè ïàðàìåòð àêòèâíîñòè ïðèëîæåíèÿ èìååò ñòàòóñ: íå àêòèâíî |
je loadConfig.exit ;òî çàâåðøàåì ðàáîòó ïðèëîæåíèÿ |
cmp byte[eax], 110 ;'n' |
je loadConfig.exit |
|
;èíà÷å âûñòàâëÿåì ðåæèì |
cmp byte[eax], '2' ;ðåæèì àêòèâàöèè ïî ãîðÿ÷åé êëàâèøå |
jne @f |
mov byte[mode], 2 |
jmp loadConfig.modeEnd |
@@: |
cmp byte[eax], '3' ;ðåæèì æåñòà ïðè çàæàòîé êëàâèøå |
jne @f |
mov byte[mode], 3 |
jmp loadConfig.modeEnd |
@@: |
mov byte[mode], 1 ;âî âñåõ îñòàëüíûõ ñëó÷àÿõ - êëàññè÷åñêèé ðåæèì |
.modeEnd: |
|
push edi |
push esi |
; ñîõðàíÿåì â edi óêàçàòåëü íà íà÷àëî òàáëèöû àäðåñîâ íàøèõ êîìàíä |
316,7 → 388,7 |
; |
compareBytes: |
push edi esi ecx ebx |
mov eax, 0 ;xor eax, eax |
xor eax, eax |
mov ecx, selfNameSize ;max ðàçìåð ñòðîê 11 |
@@: |
mov bl, byte[edi] |
334,9 → 406,6 |
pop ebx ecx esi edi |
ret |
; |
slotMax dd 0 |
selfPID dd 0 |
buf db 1024 dup(0) |
copyKill: |
push eax ebx ecx esi edi |
|
380,5 → 449,31 |
ret |
|
|
keyActivate db 41 ;16 ;'Q' ;êëàâèøà àêòèâàöèè |
keyState db 0 ;0-êëàâèøà íå àêòèâíà, 1 - êëàâèøà àêòèâíà |
|
backAdr rd 1 ;dd 0 ; àäðåñ äëÿ âîçâðàòà èç ïðîâåðêè ìûøè |
|
;slotMax dd 0 |
;selfPID dd 0 |
;buf db 1024 dup(0) |
slotMax rd 1 |
selfPID rd 1 |
buf rb 1024 |
|
;ñòðóêòóðêà äàííûõ äëÿ õðàíåíèÿ ïàðàìåòðîâ ýêðàíà |
screen: |
.width rw 1 ;dw 0 |
.height rw 1 ;dw 0 |
|
state: rb 1 ;ñîñòîÿíèå: 0=unlock, 1=lock |
mode: rb 1 ;ðåæèì ðàáîòû ïðèëîæåíèÿ: 0=íå ðàáîòàåò, 1=êëàññè÷åñêèé, 2=ïî ãîðÿ÷åé êëàâèøå |
|
newData: ;òàáëè÷êà àäðåñîâ êîìàíäíûõ ñòðîê |
.lu rd 1 |
.ld rd 1 |
.ru rd 1 |
.rd rd 1 |
newDataEnd: |
|
I_END: |