Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 7435 → Rev 7436

/programs/other/ha/HOTANGLES.ASM
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: