Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 7442 → Rev 7443

/programs/other/ha/HOTANGLES.ASM
2,7 → 2,7
; Hot Angles ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Compile with FASM
; Version 0.3.5: Oct 5, 2018
; Version 0.3.6: Oct 9, 2018
 
; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage
; All rights reserved.
53,6 → 53,13
jne @f
mcall -1
@@:
;ðåæèì æåñòà ïî ãîðÿ÷åé êëàâèøå?
cmp byte[mode], 3 ;ïîäïèñûâàåìñÿ íà èíòåðåñíûå íàì ñîáûòèÿ â çàâèñèìîñòè îò ðåæèìà ðàáîòû
jne @f
mov ebx, 00000100000000000000000000100010b ;åñëè äà, òî ïîäïèñûâàåìñÿ íà êëàâèøè
mcall 40
jmp init03
@@:
;ðåæèì àêòèâàöèè ãîðÿ÷åé êëàâèøåé?
cmp byte[mode], 2 ;ïîäïèñûâàåìñÿ íà èíòåðåñíûå íàì ñîáûòèÿ â çàâèñèìîñòè îò ðåæèìà ðàáîòû
jne @f
110,8 → 117,24
 
cmp ah, byte[keyActivate] ;åñëè íàæàòà íàøà ãîðÿ÷àÿ êëàâèøà
jne @f
 
;for mode 3 [
cmp byte[keyState], 1
je hotkey.e
 
push eax ebx
mcall 37, 0 ;çàïîìèíàåì òåêóùèå(íà÷àëüíûå) êîîðäèíàòû ìûøè
;mov dword[o.x], eax
mov word[o.y], ax
shr eax, 16
mov word[o.x], ax
pop ebx eax
 
mov byte[keyState], 1
mov byte[state], UNLOCKd
.e:
;]
;mov byte[state], UNLOCKd
jmp hotkey.end
@@:
push edx
127,7 → 150,7
@@:
pop edx
.end:
jmp mode02
jmp dword[backAdr]
 
 
init01:
449,10 → 472,165
ret
 
 
;MODE 3
init03:
mov dword[radius2], 100; 10*10
mov dword[backAdr], mode03
call setHotKey
mode03:
mcall 10
cmp eax, 2 ;îáðàáîòêà íàæàòèÿ êëàâèøè
je hotkey
 
;cmp byte[keyState], 0
;je mode03
cmp eax, 6 ;îáðàáîòêà ïåðåìåùåíèé è íàæàòèÿ ìûøè
je mouse03
 
jmp mode03
 
mouse03:
cmp byte[keyState], 0 ;åñëè êëàâèøà íå çàæàòà, òî îáíîâèì íà÷àëüíûå êîîðäèíàòû
je mouse03.updateCoord
 
cmp byte[state], LOCKd ;åñëè óãîë çàáëîêèðîâàí, òî îáíîâèì íà÷àëüíûå êîîðäèíàòû
je mouse03.updateCoord
 
call checkPointInCircle ;èíà÷å åñëè ïðåîäîëåëè ðàäèóñ àêòèâàöèè, òî âûçûâàåì äåéñòâèå íóæíîãî óãëà
jmp @f
.updateCoord:
push eax ebx
mcall 37, 0 ;çàïîìèíàåì òåêóùèå(íà÷àëüíûå) êîîðäèíàòû ìûøè
;mov dword[o.x], eax
mov word[o.y], ax
shr eax, 16
mov word[o.x], ax
pop ebx eax
@@:
jmp dword[backAdr]
 
 
radius2 dd 0 ;êâàäðàò ðàäèóñà äëÿ mode 3
o: ;êîîðäèíàòû íà÷àëüíîé è òåêóùåé òî÷êè
.x: dw 0
.y: dw 0
.cx: dw 0
.cy: dw 0
 
;ïðîâåðêà âûõîäà çà ïðåäåëû êðóãà
; sqrt( (x2-x1)^2 + (y2-y1)^2 ) <= radius
; (x2-x1)^2 + (y2-y1)^2 <= radius^2
checkPointInCircle:
push eax ebx ecx edx
mcall 37, 0 ;ïîëó÷àåì òåêóùèå êîîðäèíàòû ìûøè
;mov dword[o.cx], eax
mov word[o.cy], ax
shr eax, 16
mov word[o.cx], ax
 
xor eax, eax
xor edx, edx
mov ax, word[o.x]
mov dx, word[o.cx]
cmp dx, ax
jae @f
sub ax, dx
mov dx, ax
jmp .xend
@@:
sub dx, ax
.xend:
mov eax, edx
mul dx
 
mov ebx, eax
 
xor eax, eax
xor edx, edx
mov ax, word[o.y]
mov dx, word[o.cy]
cmp dx, ax
jae @f
sub ax, dx
mov dx, ax
jmp .yend
@@:
sub dx, ax
.yend:
mov eax, edx
mul dx
 
add ebx, eax
 
cmp ebx, dword[radius2]
jbe @f
call activateCorner ;èíà÷å àêòèâèðóåì íóæíûé óãîë
@@:
pop edx ecx ebx eax
ret
 
;âûÿñíèòü â ñòîðîíó êàêîãî óãëà óøëè è àêòèâèðîâàòü åãî
activateCorner:
push eax ecx
xor eax, eax
 
mov ax, word[o.cx]
cmp ax, word[o.x]
je activateCorner.end ;åñëè êîîðäèíàòà ðàâíà, òî âûõîäèì (òàêîãî áûòü íå äîëæíî)
ja activateCorner.right
 
;èíà÷å ëåâàÿ ñòîðîíà
mov ax, word[o.cy]
cmp ax, word[o.y]
je activateCorner.end ;åñëè êîîðäèíàòà ðàâíà, òî âûõîäèì (òàêîãî áûòü íå äîëæíî)
jb activateCorner.leftup
 
;èíà÷å ëåâûé íèæíèé óãîë
mov ecx, 1
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
jmp activateCorner.end
 
.leftup:
;ëåâûé âåðõíèé óãîë
mov ecx, 0
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
jmp activateCorner.end
 
.right: ;ïðàâàÿ ñòîðîíà ýêðàíà
mov ax, word[o.cy]
cmp ax, word[o.y]
je activateCorner.end ;åñëè êîîðäèíàòà ðàâíà, òî âûõîäèì (òàêîãî áûòü íå äîëæíî)
jb activateCorner.rightup
 
;èíà÷å ïðàâûé íèæíèé óãîë
mov ecx, 3
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
jmp activateCorner.end
 
.rightup:
;ïðàâûé âåðõíèé óãîë
mov ecx, 2
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
jmp activateCorner.end
 
.end:
pop ecx eax
ret
 
 
 
keyActivate db 41 ;16 ;'Q' ;êëàâèøà àêòèâàöèè
keyState db 0 ;0-êëàâèøà íå àêòèâíà, 1 - êëàâèøà àêòèâíà
 
backAdr rd 1 ;dd 0 ; àäðåñ äëÿ âîçâðàòà èç ïðîâåðêè ìûøè
backAdr rd 1 ;àäðåñ äëÿ âîçâðàòà èç ïðîâåðêè ìûøè
 
;slotMax dd 0
;selfPID dd 0
463,8 → 641,8
 
;ñòðóêòóðêà äàííûõ äëÿ õðàíåíèÿ ïàðàìåòðîâ ýêðàíà
screen:
.width rw 1 ;dw 0
.height rw 1 ;dw 0
.width rw 1
.height rw 1
 
state: rb 1 ;ñîñòîÿíèå: 0=unlock, 1=lock
mode: rb 1 ;ðåæèì ðàáîòû ïðèëîæåíèÿ: 0=íå ðàáîòàåò, 1=êëàññè÷åñêèé, 2=ïî ãîðÿ÷åé êëàâèøå