Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 7443 → Rev 7459

/programs/other/ha/HOTANGLES.ASM
2,7 → 2,7
; Hot Angles ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Compile with FASM
; Version 0.3.6: Oct 9, 2018
; Version 0.3.7: Oct 14, 2018
 
; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage
; All rights reserved.
31,6 → 31,7
 
UNLOCKd = 0
LOCKd = 1
SUPERLOCKd = 2
 
; çàãîëîâîê
db 'MENUET01' ;ìàãè÷åñêèé èäåíòèôèêàòîð
118,9 → 119,11
cmp ah, byte[keyActivate] ;åñëè íàæàòà íàøà ãîðÿ÷àÿ êëàâèøà
jne @f
 
;for mode 3 [
;ïðîâåðêè äëÿ mode 3
cmp byte[state], SUPERLOCKd
je hotkey.end
cmp byte[keyState], 1
je hotkey.e
je hotkey.end
 
push eax ebx
mcall 37, 0 ;çàïîìèíàåì òåêóùèå(íà÷àëüíûå) êîîðäèíàòû ìûøè
132,9 → 135,6
 
mov byte[keyState], 1
mov byte[state], UNLOCKd
.e:
;]
;mov byte[state], UNLOCKd
jmp hotkey.end
@@:
push edx
143,8 → 143,7
add dl, 128
cmp ah, dl ;åñëè îòïóùåíà íàøà ãîðÿ÷àÿ êëàâèøà
jne @f ;hotkey.end
;mov ecx, 0 ;ñòðîêè äëÿ îòëàäêè è òåñòà
;call run_command
 
mov byte[keyState], 0
mov byte[state], LOCKd
@@:
247,53 → 246,56
cmp byte[state], UNLOCKd
jne run_command.end
 
; cmp byte[mode], 2 ;åñëè ðåæèì âòîðîé
; jne @f
 
push eax ebx ecx
 
cmp ecx, 0
jne @f
mov eax, dword[newData.lu]
mov eax, apps.path1 ;dword[newData.lu]
cmp byte[eax], 0 ;åñëè ïî àäðåñó ïóñòî (èëè ëåæàë ñèìâîë '-'), òî àäðåñ 0
je .set0
mov dword[struct70.path_adr], eax
mov eax, apps.param1
mov dword[struct70.param_adr], eax
jmp .end_set_path
@@:
cmp ecx, 1
jne @f
mov eax, dword[newData.ld]
mov eax, apps.path2 ;dword[newData.ld]
cmp byte[eax], 0 ;åñëè ïî àäðåñó ïóñòî (èëè ëåæàë ñèìâîë '-'), òî àäðåñ 0
je .set0
mov dword[struct70.path_adr], eax
mov eax, apps.param2
mov dword[struct70.param_adr], eax
jmp .end_set_path
@@:
cmp ecx, 2
jne @f
mov eax, dword[newData.ru]
mov eax, apps.path3 ;dword[newData.ru]
cmp byte[eax], 0 ;åñëè ïî àäðåñó ïóñòî (èëè ëåæàë ñèìâîë '-'), òî àäðåñ 0
je .set0
mov dword[struct70.path_adr], eax
mov eax, apps.param3
mov dword[struct70.param_adr], eax
jmp .end_set_path
@@:
cmp ecx, 3
jne .end_set_path
mov eax, dword[newData.rd]
jne .set0 ;.end_set_path
mov eax, apps.path4 ;dword[newData.rd]
cmp byte[eax], 0 ;åñëè ïî àäðåñó ïóñòî (èëè ëåæàë ñèìâîë '-'), òî àäðåñ 0
je .set0
mov dword[struct70.path_adr], eax
mov eax, apps.param4
mov dword[struct70.param_adr], eax
jmp .end_set_path
.set0:
;mov dword[struct70.path_adr], 0
;mov dword[struct70.param_adr], 0
jmp @f
.end_set_path:
 
;ïàðàìåòðû
;mov dword[struct.adr],
 
;åñëè àäðåñ 0, òî íè÷åãî íå äåëàòü
cmp dword[struct70.path_adr], 0
jne .next
;mov eax, testData.ld
;mov dword[struct70.path_adr], eax
jmp @f
.next:
;êîíåö êîäà äëÿ çàìåíû
 
mcall 70, struct70
@@:
mov byte[state], LOCKd
;mov byte[keyState], 0
 
pop ecx ebx eax
.end:
ret
303,15 → 305,106
.mask dd 0
.param_adr dd 0 ; óêàçàòåëü íà ASCIIZ-ñòðîêó ñ ïàðàìåòðàìè
.other dd 0, 0
.path db 0 ; "/rd/1/TINYPAD",0 ; ïóòü
.path_adr dd 0 ;testData.lu
.path db 0
.path_adr dd 0 ; óêàçàòåëü íà ñòðîêó ñ ïóò¸ì
 
;èìÿ êîíôèãóðàöèîííîãî ôàéëà
fileName: db 'SETTINGS/HOTANGLES.CFG', 0
 
 
;ïðîõîäèì äî êîíöà òåêóùåé ñòðîêè
gotoEndString:
cmp eax, edx ;åñëè ôàéë çàêîí÷èëñÿ, òî
ja @f ;âûõîäèì
cmp byte[eax], 10
je @f
cmp byte[eax], 0
je @f
cmp byte[eax], 13
je @f
;èíà÷å ïåðåõîäèì íà ñëåäóþùèé ñèìâîë
inc eax
jmp gotoEndString
@@:
ret
 
;ïðîïóñêàåì ïåðåíîñû â íà÷àëå ñòðîêè äî ïåðâîãî àäåêâàòíîãî ñèìâîëà
gotoStartString:
cmp eax, edx ;åñëè ôàéë çàêîí÷èëñÿ, òî
ja @f ;âûõîäèì
cmp byte[eax], 10
je .next
cmp byte[eax], 0
je .next
cmp byte[eax], 13
je .next
jmp @f ;åñëè ýòî äðóãîé ñèìâîë, òî âûõîäèì
.next: ;ïåðåõîäèì íà ñëåäóþùèé ñèìâîë
inc eax
jmp gotoStartString
@@:
ret
 
 
sep: db '|' ;ñèìâîë ðàçäåëèòåëü ñòðîêè ïóòè + ïàðàìåòðû çàïóñêà
readPath:
push ebx esi edi
mov bh, 0 ; 0 - çíàê òîãî, ÷òî ïàðàìåòðû åù¸ íå âñòðå÷àëèñü
mov byte[esi], 0 ;ïðîèíèöèàëèçèðóåì áóôåðû-ñòðîêè ïóñòîòîé (íà âñÿêèé ñëó÷àé)
mov byte[edi], 0
@@:
cmp eax, edx ;åñëè ôàéë çàêîí÷èëñÿ, òî
ja @f ;âûõîäèì
mov bl, byte[eax]
;åñëè î÷åðåäíîé ñèìâîë íå êîíåö ñòðîêè
cmp bl, 10
je @f ;èíà÷å âûõîä
cmp bl, 0
je @f
cmp bl, 13
je @f
;è íå íà÷àëî ïàðàìåòðîâ
cmp bl, byte[sep]
jne .read
;åñëè sep óæå âñòðå÷àëè ðàíåå, òî
cmp bh, 0
jne .read ;ïðîñòî ïðîäîëæàåì ñ÷èòûâàòü ïàðàìåòðû äàëüøå (â íèõ ìîæåò áûòü ÷òî óãîäíî)
;èíà÷å êëàä¸ì çàâåðøàþùèé 0 è ïåðåõîäèì ê áóôåðó ñ ïàðàìåòðàìè
mov byte[esi], 0
call trim ;åù¸ íå çàáóäåì óáðàòü ëèøíèå òàáóëÿöèè è ïðîáåëû íà êîíöå íàøåé ñòðîêè
mov esi, edi
mov bh, 1
inc eax
jmp @b
.read: ;òî çàïèñûâàåì ñèìâîë â íàø áóôåð è ïåðåõîäèì íà ñëåäóþùèé ñèìâîë
mov byte[esi], bl
inc esi
inc eax
jmp @b
@@:
mov byte[esi], 0 ;êëàä¸ì çàâåðøàþùèé íîëü
pop edi esi ebx
ret
 
trim: ;esi - ïîñëåäíèé íóëåâîé ñèìâîë ñòðîêè
;push esi
mov byte[esi], 0
dec esi
cmp byte[esi], 8
je trim
cmp byte[esi], 32
je trim
inc esi
;pop esi
ret
 
 
cfgFileAdr: dd 0 ;àäðåñ êîíôèãóðàöèîííîãî ôàéëà â ïàìÿòè
 
loadConfig:
push eax ebx ecx edx
mcall 68, 27, fileName ;çàãðóæàåì êîíôèãóðàöèîííûé ôàéë â ÎÇÓ
mov dword[cfgFileAdr], eax
cmp eax, 0
je loadConfig.exit ;åñëè ôàéëà êîíôèãóðàöèè íåò, òî çàâåðøàåì ðàáîòó ïðèëîæåíèÿ
;èíà÷å äàííûå çàãðóæåíû â ÎÇÓ, ðàçìåð â edx
321,12 → 414,22
add edx, eax ;èíà÷å êëàä¸ì â edx - àäðåñ êîíöà ôàéëà
 
mov byte[mode], 0
cmp byte[eax], '0' ;121 ;'y' ;åñëè ïàðàìåòð àêòèâíîñòè ïðèëîæåíèÿ èìååò ñòàòóñ: íå àêòèâíî
cmp byte[eax], '0' ;åñëè ïàðàìåòð àêòèâíîñòè ïðèëîæåíèÿ èìååò ñòàòóñ: íå àêòèâíî
je loadConfig.exit ;òî çàâåðøàåì ðàáîòó ïðèëîæåíèÿ
cmp byte[eax], 110 ;'n'
je loadConfig.exit
 
;èíà÷å âûñòàâëÿåì ðåæèì
cmp byte[eax], 121 ;'y' ;êëàññè÷åñêèé ðåæèì
jne @f
mov byte[mode], 1
jmp loadConfig.modeEnd
@@:
cmp byte[eax], '1' ;êëàññè÷åñêèé ðåæèì
jne @f
mov byte[mode], 1
jmp loadConfig.modeEnd
@@:
cmp byte[eax], '2' ;ðåæèì àêòèâàöèè ïî ãîðÿ÷åé êëàâèøå
jne @f
mov byte[mode], 2
337,74 → 440,292
mov byte[mode], 3
jmp loadConfig.modeEnd
@@:
mov byte[mode], 1 ;âî âñåõ îñòàëüíûõ ñëó÷àÿõ - êëàññè÷åñêèé ðåæèì
mov byte[mode], 0 ;âî âñåõ îñòàëüíûõ ñëó÷àÿõ - îòêëþ÷åíî
jmp loadConfig.exit
.modeEnd:
 
push edi
push esi
; ñîõðàíÿåì â edi óêàçàòåëü íà íà÷àëî òàáëèöû àäðåñîâ íàøèõ êîìàíä
mov edi, newData
; ñîõðàíÿåì àäðåñà ñòðîê è äîáàâëÿåì 0 â êîíöå
mov esi, eax
.block:
inc esi
cmp byte[esi], 10 ;åñëè î÷åðåäíîé êîä ñèìâîëà 10 èëè 13, òî ïðîïóñêàåì ñèìâîëû
je loadConfig.propusk ;äî ïåðâîãî îòëè÷íîãî îò íèõ
cmp byte[esi], 13
je loadConfig.propusk
;èä¸ì äî êîíöà ýòîé ñòðîêè
call gotoEndString
;íàõîäèì íà÷àëî ñëåäóþùåé ñòðîêè
call gotoStartString
 
; ñèìâîë îòëè÷åí îò ïåðåíîñà ñòðîêè è âîçâðàòà êàðåòêè - åñëè ýòî íà çíàê ìèíóñ, òî çàïîìèíàåì åãî
mov dword[edi], esi
add edi, 4
push esi edi
 
;èä¸ì äî êîíöà ýòîé ñòðîêè: ïîêà íå âñòðåòèì î÷åðåäíîé 10, 13, 0 èëè file end
.while:
inc esi
cmp esi, edx ;òóò áóäåò ïðîáëåìà - òê ôàéë çàêîí÷èëñÿ, à íóëÿ íå áûëî !!! èñïðàâèòü
jae loadConfig.fileend
cmp byte[esi], 10
je loadConfig.ura
cmp byte[esi], 0
je loadConfig.ura
cmp byte[esi], 13
jne loadConfig.while
.ura:
mov byte[esi], 0
;ñ÷èòûâàåì ïóòü äëÿ ëåâîãî âåðõíåãî óãëà
mov esi, apps.path1
mov edi, apps.param1
call readPath
call gotoStartString ;íàõîäèì íà÷àëî ñëåäóþùåé ñòðîêè
 
;cmp byte[esi-1], '-'
;jne @f
push esi ;åñëè ýòî áûë çíàê ìèíóñ, òî ìåíÿåì àäðåñ íà íîëü
mov esi, dword[edi-4]
cmp byte[esi], '-'
jne @f
cmp byte[esi+1], 0
jne @f
mov dword[edi-4], 0
@@:
pop esi
;ñ÷èòûâàåì ïóòü äëÿ ëåâîãî íèæíåãî óãëà
mov esi, apps.path2
mov edi, apps.param2
call readPath
call gotoStartString
 
cmp edi, newDataEnd ;newData.end ;åñëè âñÿ òàáëèöà àäðåñîâ çàïîëíåíà, òî âûõîäèì èç öèêëà
jb loadConfig.block
.fileend:
;ñ÷èòûâàåì ïóòü äëÿ ïðàâîãî âåðõíåãî óãëà
mov esi, apps.path3
mov edi, apps.param3
call readPath
call gotoStartString
 
pop esi
pop edi
;ñ÷èòûâàåì ïóòü äëÿ ïðàâîãî íèæíåãî óãëà
mov esi, apps.path4
mov edi, apps.param4
call readPath
call gotoStartString
 
jmp loadConfig.end
;call checkAdr ;ïðîâåðèì ñòðîêè íà '-' è ïóñòîòó è âûñòàâèì áèòîâóþ ìàñêó
call checkPathAdr
 
.propusk:
mov byte[esi], 0
jmp loadConfig.block
pop edi esi
 
;ïðîïóñêàåì ñòðîêó ñ èìåíåì êëàâèøè
call gotoEndString
call gotoStartString
 
;ñ÷èòûâàåì ñêàíêîä àêòèâàöèîííîé êëàâèøè
;call readKey
;call gotoEndString
push esi edi ecx
mov esi, keystr
mov edi, keystr
call readPath
;ïðåîáðàçóåì ñòðîêó â ÷èñëî
mov esi, keystr
call strToInteger
mov byte[keyActivate], cl
pop ecx edi esi
call gotoStartString
 
;ñ÷èòûâàåì ðàäèóñ
push esi edi ecx
mov esi, radstr
mov edi, radstr
call readPath
;ïðåîáðàçóåì ñòðîêó â ÷èñëî
mov esi, radstr
call strToInteger
;òåïåðü ecx - çíà÷åíèå ðàäèóñà
;!!! äîáàâèòü ïðîâåðêó, ÷òîáû ÷èñëî íå áûëî áîëüøå îáëàñòè ýêðàíà
;íàñ èíòåðåñóåò êâàäðàò ÷èñëà
push eax edx
mov eax, ecx ;dword[radius2]
mul ecx
mov dword[radius2], eax
pop edx eax
 
pop ecx edi esi
 
;ñ÷èòûâàòü ðàçìåð ýëåìåíòîâ èíòåðôåéñà íàì íå íóæíî (ïîêà ÷òî ýòîò ïàðàìåòð òîëüêî äëÿ êîíôèãà)
jmp .end
.exit:
pop edx ecx ebx eax
mcall -1 ;çàêðûòü ýòó ïðîãðàììó
.end:
mov ecx, dword[cfgFileAdr] ;åñëè ôàéë áûë çàãðóæåí, òî
cmp ecx, 0
je @f
mcall 68, 13, ecx ;âûãðóæàåì ôàéë èç ïàìÿòè
@@:
pop edx ecx ebx eax
ret
 
 
;readKey:
;÷èòàåì êëàâèøó è âûõîäèì
; cmp dword[eax], 'Ctrl'
; jne .notCtrl
; mov byte[keyActivate], 3
; jmp .end
;.notCtrl:
; cmp dword[eax], 'Shif'
; jne .notShift
; mov byte[keyActivate], 2
; jmp .end
;.notShift:
; cmp dword[eax], 'Spac'
; jne .notSpace
; mov byte[keyActivate], 32
; jmp .end
;.notSpace:
; cmp word[eax], 'Al'
; jne .notAlt
; mov byte[keyActivate], 1
; jmp .end
;.notAlt:
;óáåäèìñÿ, ÷òî òàì 1 ñèìâîë, à íå ñòðîêà
; cmp byte[eax+1], 10
; je .oneSymb
; cmp byte[eax+1], 0
; je .oneSymb
; cmp byte[eax+1], 13
; je .oneSymb
; jmp .default ;â ëþáîì äðóãîì ñëó÷àå îøèáêà êîíôèãà - âûõîä
;.oneSymb:
;ïðîâåðÿåì, ÷òî ñèìâîë ðàçðåø¸ííûé !!! äîäåëàòü
 
;äîáàâëÿåì ñèìâîë êàê åñòü
; push ebx
; ;xor ebx, ebx
; mov bl, byte[eax]
; mov byte[keyActivate], bl
; pop ebx
 
; jmp .end
;.default:
; mcall -1
; ;mov byte[keyActivate], 2
;.end:
; ret
 
 
checkPathAdr:
push eax ebx
xor eax, eax
 
mov ebx, apps.path1
cmp byte[ebx], '-'
jne @f
;cmp byte[ebx+1], 0
;jne @f
mov byte[ebx], 0
@@:
mov ebx, apps.path2
cmp byte[ebx], '-'
jne @f
;cmp byte[ebx+1], 0
;jne @f
mov byte[ebx], 0
@@:
mov ebx, apps.path3
cmp byte[ebx], '-'
jne @f
;cmp byte[ebx+1], 0
;jne @f
mov byte[ebx], 0
@@:
mov ebx, apps.path4
cmp byte[ebx], '-'
jne @f
;cmp byte[ebx+1], 0
;jne @f
mov byte[ebx], 0
@@:
pop ebx eax
ret
 
 
checkAdr:
push eax ebx
xor eax, eax
 
mov ebx, apps.path1
cmp byte[ebx], '-'
jne @f
inc eax
@@:
mov ebx, apps.path2
cmp byte[ebx], '-'
jne @f
add eax, 2
@@:
mov ebx, apps.path3
cmp byte[ebx], '-'
jne @f
add eax, 4
@@:
mov ebx, apps.path4
cmp byte[ebx], '-'
jne @f
add eax, 8
@@:
 
mov ebx, apps.param1
cmp byte[ebx], '-'
jne @f
add eax, 16
@@:
mov ebx, apps.param2
cmp byte[ebx], '-'
jne @f
add eax, 32
@@:
mov ebx, apps.param3
cmp byte[ebx], '-'
jne @f
add eax, 64
@@:
mov ebx, apps.param4
cmp byte[ebx], '-'
jne @f
add eax, 128
@@:
 
mov byte[apps.bits], al
pop ebx eax
ret
 
 
 
;ïðåîáðàçîâàíèå ñòðîêè â öåëîå ÷èñëî
strToInteger: ;âõîä: esi - óêàçàòåëü íà ñòðîêó ñ äåñÿòè÷íîé çàïèñüþ ÷èñëà, âûõîä: eñx - ÷èñëî
push eax ebx edx edi
xor eax, eax ;îáíóëÿåì eax
xor ecx, ecx
mov edi, esi
.get_last_symbol:
;÷èòàåì î÷åðåäíîé ñèìâîë
mov al, byte[edi]
 
;åñëè ýòî íîëü, òî ñòðîêà çàêîí÷èëàñü
cmp al, 0
je @f
 
;èíà÷å ïåðåõîäèì íà ñëåäóþùèé ñèìâîë
inc edi
jmp .get_last_symbol
@@: ;äîøëè äî ïîñëåäíåãî ñèìâîëà è êëàä¸ì àäðåñ íà íåãî â edi
dec edi
 
cmp edi, esi ;àäðåñ ïîñëåäíåãî ñèìâîëà äîëæåí áûòü äàëüøå àäðåñà ïåðâîãî ñèìâîëà
jae @f
jmp .error ;èíà÷å îøèáêà
@@:
;òåïåðü â edi ïîñëåäíèé ñèìâîë, à esi óêàçûâàåò íà íà÷àëî ñòðîêè (íà ïåðâé ñèìâîë ñòðîêè)
mov cl, byte[edi]
sub cl, 48 ;0x30 ;'0'
dec edi ;ïåðåõîäèì íà ñëåä ñèìâîë îò êîíöà
mov ebx, 10 ;ìíîæèòåëü ñòåïåíè
.tranform_cicle:
cmp edi, esi ;åñëè áîëüøå íåò ñèìâîëîâ ñòðîêå, òî ÷èñëî ïðåîáðàçîâàëè - âûõîäèì
jb .end
 
mov eax, 0
mov al, byte[edi]
sub al, 48 ;'0'
cmp al, 9 ;0x39 ;åñëè ÷èñëî áîëüøå 9, òî âèäèìî â ñòðîêå áûëî ÷òî-òî íå òàê
ja .error
cmp al, 0 ;0x30 ;åñëè ÷èñëî ìåíüøå 0, òî âèäèìî â ñòðîêå áûëî ÷òî-òî íå òàê
jb .error
mov edx, 0
mul ebx
 
add ecx, eax
 
dec edi
mov edx, 0
mov eax, 10
mul ebx
mov ebx, eax
jmp .tranform_cicle
.error:
mov ecx, 0
.end:
pop edi edx ebx eax
ret
 
 
;Âûíåñòè êîä íèæå â îòäåëüíûé îáùèé ìîäóëü
selfName db '@HOTANGLES',0
selfNameSize = 10 ;äî 11 byte
474,7 → 795,7
 
;MODE 3
init03:
mov dword[radius2], 100; 10*10
;mov dword[radius2], 100; 10*10
mov dword[backAdr], mode03
call setHotKey
mode03:
496,6 → 817,9
cmp byte[state], LOCKd ;åñëè óãîë çàáëîêèðîâàí, òî îáíîâèì íà÷àëüíûå êîîðäèíàòû
je mouse03.updateCoord
 
cmp byte[state], SUPERLOCKd ;åñëè äåéñòâèå áûëî âûïîëíåíî è ïîëó÷èëè áëîêèðîâêó, òî æä¸ì îòïóñêàíèÿ êëàâèøè àêòèâàöèè
je @f
 
call checkPointInCircle ;èíà÷å åñëè ïðåîäîëåëè ðàäèóñ àêòèâàöèè, òî âûçûâàåì äåéñòâèå íóæíîãî óãëà
jmp @f
.updateCoord:
589,7 → 913,7
mov ecx, 1
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
mov byte[state], SUPERLOCKd
jmp activateCorner.end
 
.leftup:
597,7 → 921,7
mov ecx, 0
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
mov byte[state], SUPERLOCKd
jmp activateCorner.end
 
.right: ;ïðàâàÿ ñòîðîíà ýêðàíà
610,7 → 934,7
mov ecx, 3
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
mov byte[state], SUPERLOCKd
jmp activateCorner.end
 
.rightup:
618,7 → 942,7
mov ecx, 2
call run_command
mov byte[keyState], 0
mov byte[state], LOCKd
mov byte[state], SUPERLOCKd
jmp activateCorner.end
 
.end:
631,10 → 955,6
keyState db 0 ;0-êëàâèøà íå àêòèâíà, 1 - êëàâèøà àêòèâíà
 
backAdr rd 1 ;àäðåñ äëÿ âîçâðàòà èç ïðîâåðêè ìûøè
 
;slotMax dd 0
;selfPID dd 0
;buf db 1024 dup(0)
slotMax rd 1
selfPID rd 1
buf rb 1024
644,14 → 964,23
.width rw 1
.height rw 1
 
state: rb 1 ;ñîñòîÿíèå: 0=unlock, 1=lock
state: rb 1 ;ñîñòîÿíèå: 0=unlock, 1=lock, 2=superlock for mode 3
mode: rb 1 ;ðåæèì ðàáîòû ïðèëîæåíèÿ: 0=íå ðàáîòàåò, 1=êëàññè÷åñêèé, 2=ïî ãîðÿ÷åé êëàâèøå
 
newData: ;òàáëè÷êà àäðåñîâ êîìàíäíûõ ñòðîê
.lu rd 1
.ld rd 1
.ru rd 1
.rd rd 1
newDataEnd:
 
keystr: rb 4 ;ñòðîêà ñî çíà÷åíèåì ñêàíêîäà àêòèâàöèîííîé êëàâèøè
radstr: rb 5 ;ñòðîêà ñî çíà÷åíèåì ðàäèóñà
apps:
.bits: rb 1
.path1: rb 512
.path2: rb 512
.path3: rb 512
.path4: rb 512
.param1: rb 512
.param2: rb 512
.param3: rb 512
.param4: rb 512
appsEnd:
 
 
I_END: