Files
kolibrios/programs/other/ha/HACONFIG.ASM
T
ace-dent d50642ce1f general: Fix brand name to КолибриОС (#280)
- Ensure consistent brand name`КолибриОС`; update Docs and source code. Fixes #6.
- Minimal whitespace clean-up; remove some trailing space from end of lines.

Reviewed-on: KolibriOS/kolibrios#280
Reviewed-by: Burer <burer@noreply.localhost>
Reviewed-by: Mikhail Frolov <mixa.frolov2003@gmail.com>
Co-authored-by: Andrew <dent.ace@gmail.com>
Co-committed-by: Andrew <dent.ace@gmail.com>
2025-09-25 16:39:01 +02:00

1808 lines
47 KiB
NASM
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Hot Angles Config ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Compile with FASM
; Version 0.3.9: Apr 11, 2020
; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage
; All rights reserved.
; Redistribution and use in source and binary forms, with or without modification,
; are permitted provided that the following conditions are met:
; * Redistributions of source code must retain the above copyright notice, this
; list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright notice,
; this list of conditions and the following disclaimer in the documentation and/or
; other materials provided with the distribution.
; * Neither the name of the <organization> nor the names of its contributors may
; be used to endorse or promote products derived from this software without
; specific prior written permission.
; THE SOFTWARE IS PROVIDED УAS ISФ, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
; INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
; PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
; --------------------------------------------------------------------------------------
;P.S. ╩юфє ЄЁхсєхЄё  юяЄшьшчрЎш  ш фюЁрсюЄър (ёь. Єхьє ЇюЁєьр)
format binary as "" ; Binary file format without extension
use32 ; Tell compiler to use 32 bit instructions
org 0 ; the base address of code, always 0x0
; Зруюыютюъ шёяюыэ хьюую Їрщыр ╩юышсЁш╬╤
db 'MENUET01'
dd 1
dd START
dd I_END
dd MEM
dd STACKTOP
dd 0, sys_path
; ═рўрыю юсырёЄш ъюфр
include 'lang.inc' ;яюффхЁцър  ч√ъют яЁш ъюьяшы Ўшш
include '../../macros.inc'
include '../../proc32.inc'
include '../../dll.inc'
include '../../KOSfuncs.inc'
include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;ъюьяюэхэЄ√ checkBox ш editBox
include '../../load_lib.mac' ;ьръЁюё фы  чруЁєчъш сшсышюЄхъ
@use_library
KMENUITEM_NORMAL equ 0
KMENUITEM_SUBMENU equ 1
KMENUITEM_SEPARATOR equ 2
Otstup = 30
START:
call copyKill ;яЁюёЄхщ°р▀ чр∙шЄр юЄ чряєёър тЄюЁющ ъюяшш яЁшыюцхэш▀
mcall 68, 11 ;шэшЎшрышчрЎш▀ ъєўш
;mcall 48,3,sc,sizeof.system_colors ;яюыєўшЄ№ ёшёЄхьэ√х ЎтхЄр
mov eax,48 ;яюыєўшЄ№ ёшёЄхьэ√х ЎтхЄр
mov ebx,3
mov ecx, sc
mov edx, sizeof.system_colors
mcall
stdcall dll.Load, @IMPORT
or eax, eax
jnz exit
mov eax,40 ;єёЄрэютшЄ№ ьрёъє фы▀ юцшфрхь√ї ёюс√Єшщ
mov ebx,0x27 ;ёшёЄхьр сєфхЄ ЁхрушЁютрЄ№ Єюы№ъю эр ёююс∙хэшх ю яхЁхЁшёютъх, эрцрЄр ъэюяър, юяЁхфхы▐ээр▀ Ёрэхх, ёюс√Єшх юЄ ь√°ш (ўЄю-Єю ёыєўшыюё№ - эрцрЄшх эр ъэюяъє ь√°ш шыш яхЁхьх∙хэшх; ёсЁрё√трхЄё▀ яЁш яЁюўЄхэшш)
mcall
load_libraries l_libs_start,load_lib_end ;чруЁєчър сшсышюЄхъ(ш)
stdcall [OpenDialog_Init],OpenDialog_data ;яюфуюЄютър фшрыюур
;mode menu
stdcall [kmenu_init], sc ;kmenu initialisation
stdcall [ksubmenu_new]
mov [modeMenu], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu0, 110
stdcall [ksubmenu_add], [modeMenu], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu1, 111
stdcall [ksubmenu_add], [modeMenu], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu2, 112
stdcall [ksubmenu_add], [modeMenu], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, valueModeMenu3, 113
stdcall [ksubmenu_add], [modeMenu], eax
stdcall [kmenuitem_new], KMENUITEM_SUBMENU, valueModeMenu1, [modeMenu]
call loadConfig ;чруЁєцрхь ъюэЇшуєЁрЎш■ шч Їрщыр, хёыш эхЄ - Єю т√ёЄрты▀хь ярЁрьхЄЁ√ яю єьюыўрэш■
call draw_window ;юЄЁшёютрЄ№ юъэю яЁшыюцхэш▀
; ╬сЁрсюЄър Ўшъыр ёюс√Єшщ
event_wait:
mov eax, 10 ; function 10 : wait until event
mcall ; event type is returned in eax
cmp eax, 1 ; Event redraw request ?
je red ; Expl.: there has been activity on screen and
; parts of the applications has to be redrawn.
cmp eax, 2 ; Event key in buffer ?
je key ; Expl.: User has pressed a key while the
; app is at the top of the window stack.
cmp eax, 3 ; Event button in buffer ?
je button ; Expl.: User has pressed one of the
; applications buttons.
invoke edit_box_mouse, editLU ;яЁютхЁър ёюс√Єшщ ь√°ш фы▀ editBox'ют
invoke edit_box_mouse, editLD
invoke edit_box_mouse, editRU
invoke edit_box_mouse, editRD
;stdcall [kmainmenu_dispatch_cursorevent], [modeMenu] ;яЁютхЁър ь√°ш фы▀ ъюьсюсюъёр
invoke edit_box_mouse, editRadius
jmp event_wait
red: ;юсЁрсюЄър ёюс√Єш▀ яхЁхЁшёютъш юъэр
call draw_window
jmp event_wait
key: ; Keypress event handler
mov eax, 2 ; The key is returned in ah. The key must be
mcall ; read and cleared from the system queue.
invoke edit_box_key, editLU
invoke edit_box_key, editLD
invoke edit_box_key, editRU
invoke edit_box_key, editRD
invoke edit_box_key, editRadius
cmp eax, 1
je event_wait
cmp word[hkSymbol], 0
jne event_wait
cmp al, 0
jne .next
mov byte[hkSymbol], ah
push eax ecx esi ;ёюїЁрэ▀хь ёърэъюф ъыртш°ш
shr eax, 16
mov byte[keyscan], al
mov ecx, 0
mov cl, al ;byte[keyscan]
mov esi, keystr.data
call IntToStr
;ёўшЄрхь яюыєўхээ√щ ЁрчьхЁ ёЄЁюъш
xor ecx, ecx
mov esi, keystr.data
@@:
cmp byte[esi], 0
je @f
inc esi
inc ecx
;cmp ecx, 4
;je @f
jmp @b
@@:
;ш ёюїЁрэ▀хь хую
mov dword[keystr.size], ecx
pop esi ecx eax
jmp red
.next:
;cmp al, 2
;jne @f
;cmp ah, 0
;jne @f
;ёўшЄ√трхь єяЁрты▀■∙шх ъыртш°ш
;shr eax, 16
;bt eax, 0 ;left shift
;jne @f
;mov byte[hkSymbol], 2
;jmp red
@@:
jmp event_wait ; Just read the key, ignore it and jump to event_wait.
button: ; Buttonpress event handler
mov eax,17 ; The button number defined in window_draw
mcall ; is returned to ah.
cmp ah,1 ; button id=1 ?
jne noclose
exit:
mov eax,-1 ; Function -1 : close this program
mcall
noclose:
cmp ah, 2 ;ъэюяър "╧ЁшьхэшЄ№"
jne @f ;butend
call applyButton ;т√чют эр°хую юсЁрсюЄўшър эрцрЄш▀ ъэюяъш
jmp event_wait
@@:
cmp ah, 4
jne @f
mov byte[editID], 4
call but_open_dlg
jmp event_wait
@@:
cmp ah, 5
jne @f
mov byte[editID], 5
call but_open_dlg
jmp event_wait
@@:
cmp ah, 6
jne @f
mov byte[editID], 6
call but_open_dlg
jmp event_wait
@@:
cmp ah, 7
jne @f
mov byte[editID], 7
call but_open_dlg
jmp event_wait
@@:
cmp ah, 8
jne @f
push eax ebx ecx
mcall 9, pi, -1 ;get window coord
mov eax, dword[pi+34]
add eax, buttonModeX ;+ 5
mov word[coordModeMenu.x], ax
mov eax, dword[pi+38]
add eax, buttonModeY + 20 ;20 - ¤Єю ёьх∙хэшх тёяы√тр■∙хую ьхэ■
mov word[coordModeMenu.y], ax
stdcall [ksubmenu_draw], [modeMenu], coordModeMenu
pop ecx ebx eax
jmp event_wait
@@:
cmp ah, 9
jne @f
mov word[hkSymbol], 0
jmp red ;event_wait
@@:
cmp ah, 110
jne @f
mov byte[mode], 48 ;'0'
jmp event_wait
@@:
cmp ah, 111
jne @f
mov byte[mode], 49 ;'1'
jmp event_wait
@@:
cmp ah, 112
jne @f
mov byte[mode], 50 ;'2'
jmp event_wait
@@:
cmp ah, 113
jne @f
mov byte[mode], 51 ;'3'
jmp event_wait
@@:
butend:
jmp event_wait ;this is for ignored events, useful at development
;шь▀ ъюэЇшуєЁрЎшюээюую Їрщыр
fileName: db 'SETTINGS/HA.CFG', 0
;ёЄЁєъЄєЁр фы▀ ёючфрэш▀/яхЁхчряшёш Їрщыр
createFile:
.func dd 2 ;эюьхЁ яюфЇєэъЎшш
.re dd 0, 0 ;чрЁхчхЁтшЁютрэю
.size dd 0 ;ёъюы№ъю срщЄ яшёрЄ№
.data_adr dd 0 ;єърчрЄхы№ эр фрээ√х
.path db 0
.path_adr dd fileName ;яєЄ№
;ёЄЁюър ярЁрьхЄЁют яю єьюыўрэш■ ш х▐ ЁрчьхЁ
defaultDataForConfig db 121,13,10,'/sys/HACONFIG',13,10,'/sys/HACONFIG',13,10,'/sys/HACONFIG',13,10,'/sys/HACONFIG',13,10,'Space',13,10,'57',13,10,'10',13,10,'s',13,10
defaultDataSize = 85 ;48+19+4
copyParam: ;ъюяшЁєхЄ ярЁрьхЄЁ(ъюьрэфє чряєёър) т сєЇхЁ (ёь. фры№°х)
push esi ebx ecx
mov ecx, dword[ebx] ;ўшЄрхь ЁрчьхЁ ёЄЁюъш
cmp ecx, 0 ;яєёЄр ыш ёЄЁюър?
jne copyParam.copy ;хёыш эхЄ, Єю яхЁхїюфшь ъ ъюяшЁютрэш■ ёюфхЁцшьюую ёЄЁюъш (ъ Ўшъыє)
mov byte[eax], '-' ;хёыш цх яєёЄю, Єю чрьхэ▀хь ёшьтюыюь ьшэєё '-'
inc eax
;jmp copyParam.copyEnd ;ш т√їюфшь
;фрыхх т эрўрых Ўшъыр яЁюшчющф▐Є ёЁртэхэшх ш т√їюф
.copy: ;ъюяшЁєхь ёшьтюы√
cmp ecx, 0
je copyParam.copyEnd
mov bl, byte[esi]
mov byte[eax], bl
dec ecx
inc eax
inc esi
jmp copyParam.copy
.copyEnd:
pop ecx ebx esi
ret
addPerenos: ;фюсрты▀хЄ яхЁхэюё ёЄЁюъш т сєЇхЁ
mov byte[eax], 13
inc eax
mov byte[eax], 10
inc eax
ret
;юсЁрсюЄўшъ ъэюяъш "╧ЁшьхэшЄ№"
applyButton:
push eax ebx ecx
;mov dword[createFile.data_adr], defaultDataForConfig
;mov dword[createFile.size], defaultDataSize
;т√ўшёышь ЁрчьхЁ Їрщыр ъюэЇшуєЁрЎшш т срщЄрї
mov ecx, 9*2+1 ;1 срщЄ эр ёюёЄю▀эшх ръЄштэюёЄш ш 9 ярЁ яхЁхэюёют ёЄЁюъ (ёшьтюы√ 13, 10)
add ecx, dword[editLU.size] ;яы■ё ЁрчьхЁ ърцфющ ёЄЁюъш т срщЄрї
add ecx, dword[editLD.size]
add ecx, dword[editRU.size]
add ecx, dword[editRD.size] ;dataBuffer.size4]
add ecx, dword[editRadius.size]
add ecx, dword[hkSize] ;ЁрчьхЁ шьхэш ръЄштрЎшюээющ ъэюяъш
add ecx, dword[keystr.size] ;ЁрчьхЁ ёърэъюфр ръЄштрЎшюээющ ъэюяъш
inc ecx ; х∙▐ 1 срщЄ фы▀ їЁрэхэш▀ ЁрчьхЁр ¤ыхьхэЄют
;cmp dword[keystr.size], 3
;jbe @f
;mcall -1
;@@:
;хёыш чрфрэ√ яєёЄ√х ёЄЁюъш, Єю ь√ ртЄюьрЄшўхёъш фюсрты▀хь чэръ ьшэєё, чэрўшЄ ЁрчьхЁ +1 срщЄ
cmp dword[editLU.size], 0
jne @f
inc ecx
@@:
cmp dword[editLD.size], 0
jne @f
inc ecx
@@:
cmp dword[editRU.size], 0
jne @f
inc ecx
@@:
cmp dword[editRD.size], 0
jne @f
inc ecx
@@:
;ЄхяхЁ№ ЁрчьхЁ Їрщыр ъюэЇшуєЁрЎшш т ecx
mov dword[createFile.size], ecx ;яюыюцшь ЁрчьхЁ срщЄ т ёЄЁєъЄєЁє ёючфрэш▀/яхЁхчряшёш Їрщыр
mcall 68, 12, ecx ;т√фхы▀хь сыюъ ярь▀Єш яюф сєЇхЁ ёюфхЁцшьюую
mov dword[createFile.data_adr], eax ;ёюїЁрэ▀хь рфЁхё сєЇхЁр т ёЄЁєъЄєЁє
;чряюыэшь сєЇхЁ ёюфхЁцшьюую:
push ebx ;ёюїЁрэ▀хь т√сЁрээ√щ Ёхцшь
mov bl, byte[mode]
mov byte[eax], bl
pop ebx
inc eax
call addPerenos
push esi ebx
call UpdateEditsSizes ;юсэютшЄ№ ЁрчьхЁ√ ЄхъёЄр т edit'рї
mov esi, dataBuffer.1 ;editLU.text
mov ebx, dataBuffer.size1 ;editLU.size
call copyParam
call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш
mov esi, dataBuffer.2
mov ebx, dataBuffer.size2
call copyParam
call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш
mov esi, dataBuffer.3
mov ebx, dataBuffer.size3
call copyParam
call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш
mov esi, dataBuffer.4
mov ebx, dataBuffer.size4
call copyParam
call addPerenos ;фюсрты▀хь яхЁхэюё ёЄЁюъш
;ёюїЁрэ▀хь ъэюяъє ръЄштрЎшш
call saveKey
call addPerenos
;ёюїЁрэ▀хь ёърэъюф ъэюяъш
mov esi, keystr.data ;чряшё√трхь ёЄЁюъє keystr т Їрщы
xor ebx, ebx
@@:
cmp byte[esi], 0
je @f
mov bl, byte[esi]
mov byte[eax], bl
inc eax
inc esi
cmp esi, keystr.size-1
jae @f
jmp @b
@@:
call addPerenos
;ёюїЁрэ▀хь Ёрфшєё
;!!! хёыш Ёрфшєё юёЄртыхэ яєёЄ√ь, Єю эєцэю ёюїЁрэ▀Є№ чэрўхэшх яю єьюыўрэш■ (ёхщўрё яш°хЄё▀ '-')
mov esi, radiusBuffer.data
mov ebx, editRadius.size ;radiusBuffer.size
call copyParam
call addPerenos
;фюсрты▀хь ЁрчьхЁ ¤ыхьхэЄют
push ebx ;ёюїЁрэ▀хь т√сЁрээ√щ Ёхцшь
mov bl, byte[sizeStyle]
mov byte[eax], bl
pop ebx
inc eax
call addPerenos
pop ebx esi
mov ebx, createFile
mcall 70
cmp eax, 0
je .end
;шэрўх чфхё№ эєцэю т√тхёЄш юъэю ё ю°шсъющ !!!
.end:
mcall 68, 13, dword[createFile.data_adr] ;юётюсюцфрхь ярь▀Є№ яюф сєЇхЁ
call finishHotAnglesApp ;чртхЁ°рхь ЁрсюЄє тёхї ъюяшщ ёхЁтшёр @HA
call loadConfig ;яхЁхчруЁєцрхь Їрщы ъюэЇшур
call draw_window ;яхЁхЁшёют√трхь юъэю
call startHotAnglesApp ;яхЁхчряєёърхь @HA
pop ecx ebx eax
ret
compareBytes2:
push edi esi ecx ebx
xor eax, eax
mov ecx, 10 ;max ЁрчьхЁ ёЄЁюъ 11
@@:
mov bl, byte[edi]
cmp bl, byte[esi]
jne compareBytes.no
inc edi
inc esi
cmp ecx, 0
je @f
dec ecx
jmp @b
.no:
mov eax, 1
@@:
pop ebx ecx esi edi
ret
finishHotAnglesApp:
;эрїюфшь тёх ъюяшш яЁшыюцхэш▀ яю шьхэш ш чртхЁ°рхь шї
push eax ebx ecx esi edi
;єърчрЄхыш, ъюЄюЁ√х эшъюуфр эх ьхэ▀■Єё▀:
mov esi, startAppData.file_name ;яхЁтр▀ ёЄЁюър - шёъюьюх шь▀ яЁшыюцхэш▀
mov edi, buf ;тЄюЁр▀ ёЄЁюър - шь▀ Єхъє∙хую ёыюЄр
add edi, 10
mov ecx, 1
@@:
mcall 9, buf, ecx ;яюыєўрхь фрээ√х юўхЁхфэюую ёыюЄр
mov dword[slotMax], eax
call compareBytes2 ;ёЁртэштрхь шь▀
cmp eax, 0
jne finishHotAnglesApp.next ;хёыш эх ёютярыю, Єю яхЁхїюфшь эр ёыхфє■∙шщ ёыюЄ
mcall 18, 2, ecx ;шэрўх чртхЁ°рхь ёыюЄ
.next:
inc ecx
cmp ecx, dword[slotMax]
ja @f
jmp @b
@@:
pop edi esi ecx ebx eax
ret
startHotAnglesApp:
;чряєёърхь яЁшыюцхэшх чрэютю
push eax ebx
mcall 70, startAppData
cmp eax, 0
ja @f ;хёыш eax>0, Єю єёях°эю чряє∙хэю
;!!! шэрўх ЄєЄ яхўрЄрхь ю°шсъє
@@:
pop ebx eax
ret
startAppData:
.subfunction dd 7
.flags dd 0
.param dd 0
.rezerv dd 0, 0
.full_name db '/sys/'
.file_name db '@HA', 0
UpdateEditsSizes:
push eax
mov eax, dword[editLU.size]
mov dword[dataBuffer.size1], eax
mov eax, dword[editLD.size]
mov dword[dataBuffer.size2], eax
mov eax, dword[editRU.size]
mov dword[dataBuffer.size3], eax
mov eax, dword[editRD.size]
mov dword[dataBuffer.size4], eax
mov eax, dword[editRadius.size]
mov dword[radiusBuffer.size], eax
pop eax
ret
fileAdr dd 0
loadConfig:
push eax ebx ecx edx
mcall 68, 27, fileName ;чруЁєцрхь ъюэЇшуєЁрЎшюээ√щ Їрщы т ╬╟╙
mov dword[fileAdr], eax ;ёюїЁрэ▀хь рфЁхё сыюър ярь▀Єш Їрщыр
cmp eax, 0
je loadConfig.default ;хёыш Їрщыр ъюэЇшуєЁрЎшш эхЄ, Єю ёЄртшь эрёЄЁющъш яю єьюыўрэш■
;шэрўх фрээ√х чруЁєцхэ√ т ╬╟╙, ЁрчьхЁ т edx
cmp edx, 0 ;хёыш Їрщы яєёЄ, т э▐ь эхЄ фрээ√ї, Єю ёЄртшь эрёЄЁющъш яю єьюыўрэш■
je loadConfig.default
.start:
add edx, eax ;ъырф▐ь т edx - рфЁхё ъюэЎр ъюэЇшу.фрээ√ї
.chStart:
push ebx
mov bl, byte[eax]
cmp bl, 48 ; хёыш чэрўхэшх т√їюфшЄ чр фюяєёЄшь√х яЁхфхы√, Єю яЁютхЁ▀хь эр 'n' (фы▀ ёютьхёЄшьюёЄш)
jb loadConfig.checkN
cmp bl, 51
ja loadConfig.checkN
mov byte[mode], bl ;шэрўх єёЄрэртыштрхь ¤ЄюЄ Ёхцшь ъръ хёЄ№
jmp loadConfig.modeEnd ;ш шф▐ь фры№°х
.checkN:
cmp bl, 'n' ;хёыш n - Єю Ёхцшь "юЄъы■ўхэю"
jne @f
mov byte[mode], 48 ;'0'
jmp loadConfig.modeEnd
@@:
cmp bl, 'y' ;хёыш y - Єю ъырёёшўхёъшщ Ёхцшь
jne @f
mov byte[mode], 49 ;'1'
jmp loadConfig.modeEnd
@@:
mov byte[mode], 48 ;'0' шэрўх яю єьюыўрэш■ юЄъы■ўхэю
;mov byte[mode], 49 ;'1' шэрўх яю єьюыўрэш■ тъы■ў▐э ъырёёшўхёъшщ Ёхцшь ЁрсюЄ√
.modeEnd:
pop ebx
;jmp loadConfig.end ;ъюьрэфр фы▀ єфюсёЄтр юЄырфъш ш яюшёър ю°шсюъ
;ъюяшЁєхь ёюфхЁцшьюх ёЄЁюъ т сєЇхЁ
push edi esi ecx ebx eax
;шэшЎшрышчшЁєхь єърчрЄхыш эр рфЁхёр сєЇхЁр ёЄЁюъш ш х▐ ЁрчьхЁр
mov edi, dataBuffer.1
mov esi, dataBuffer.size1
;ecx - ёў▐Єўшъ срщЄ т ёЄЁюъх
.block:
xor ecx, ecx ;юсэєы▀хь ёў▐Єўшъ
inc eax
cmp byte[eax], 10 ;хёыш юўхЁхфэющ ъюф ёшьтюыр 10 шыш 13, Єю яЁюяєёърхь ёшьтюы√
je loadConfig.block ;фю яхЁтюую юЄышўэюую юЄ эшї
cmp byte[eax], 13
je loadConfig.block
; ёшьтюы юЄышўхэ юЄ яхЁхэюёр ёЄЁюъш ш тючтЁрЄр ърЁхЄъш - эрўшэрхь ъюяшЁютрЄ№ юЄё■фр т сєЇхЁ
mov bl, byte[eax]
mov byte[edi], bl
inc edi
inc eax
inc ecx ;єтхышўштрхь ёў▐Єўшъ ёшьтюыют т ёЄЁюъх
;шф▐ь фю ъюэЎр ¤Єющ ёЄЁюъш: яюър эх тёЄЁхЄшь юўхЁхфэющ 10, 13, 0 шыш file end
.while: ;ш ъюяшЁєхь тё▐ т сєЇхЁ
cmp eax, edx ;яЁютхЁ▀хь чръюэўшыё▀ ыш Їрщы, р ъюэЎр ёЄЁюъш эх с√ыю !!!
ja loadConfig.ura
cmp byte[eax], 10
je loadConfig.ura
cmp byte[eax], 0
je loadConfig.ura
cmp byte[eax], 13
je loadConfig.ura
mov bl, byte[eax]
mov byte[edi], bl
inc edi
inc eax
inc ecx
cmp ecx, 511
jae loadConfig.ura
jmp loadConfig.while
.ura:
mov byte[edi], 0 ;ъырф▐ь чртхЁ°р■∙шщ 0 т ёЄЁюъє
mov dword[esi], ecx ;ёюїЁрэ▀хь ЁрчьхЁ ёЄЁюъш
add esi, 4 ;яхЁхїюфшь эр ЁрчьхЁ ёыхфє■∙хую сєЇхЁр
sub edi, ecx ;яхЁхїюфшь эр ёыхфє■∙шщ сєЇхЁ
add edi, 512
;xor ecx, ecx ;юсэєы▀хь ЁрчьхЁ ёЄЁюъш
cmp edi, dataBuffer.size1 ;хёыш ¤Єю с√ы яюёыхфэшщ сєЇхЁ (ш ь√ т√°ыш чр рфЁхёр ЁрчьхЁют сєЇхЁют), Єю т√їюфшь
jb loadConfig.block
call readOptKey ;ёўшЄ√трхь ъыртш°є
call gotoEndString
;ёўшЄ√трхь ёърэъюф ъыртш°ш
call readScanKey
call gotoEndString
call readOptRadius ;ёўшЄ√трхь чэрўхэшх Ёрфшєёр фы▀ mode 3
call gotoEndString
call readOptSize ;ёўшЄ√трхь ЁрчьхЁ ¤ыхьхэЄют
call gotoEndString
pop eax ebx ecx esi edi
jmp loadConfig.end
.default:
mov eax, defaultDataForConfig
mov edx, defaultDataSize
jmp loadConfig.start
.end:
mov ecx, dword[fileAdr] ;хёыш Їрщы с√ы чруЁєцхэ, Єю
cmp ecx, 0
je @f
mcall 68, 13, ecx ;т√уЁєцрхь Їрщы шч ярь▀Єш
@@:
call updateParams ;яЁшьхэ▀хь эрёЄЁющъш ърцфюую сєЇхЁр
call setMySize ;яЁшьхэ▀хь эрёЄЁющъш ЁрчьхЁр ¤ыхьхэЄют
pop edx ecx ebx eax
ret
setMySize:
push eax
;т√ёЄрты▀хь mysize т чртшёшьюёЄш юЄ чэрўхэш▀ sizeStyle
cmp byte[sizeStyle], '0'
jb @f
cmp byte[sizeStyle], '7'
ja @f
mov eax, 0 ;хёыш чэрўхэшх ЁрчьхЁр чрфрэю, Єю хую ш т√ёЄрты▀хь
mov al, byte[sizeStyle]
sub al, '0'
jmp .end
@@:
cmp byte[sizeStyle], 'a'
je .auto
;cmp byte[sizeStyle], 's'
;je .system
.system: ;шэрўх чэрўхэшх яю єьюыўрэш■: s - ёшёЄхьэр▀
; push ebx ecx
;!!!
; mov eax, 9
; mcall 48, 11 ;яюыєўрхь ёшёЄхьэ√щ ЁрчьхЁ °ЁшЇЄр
;eax - т√ёюЄр °ЁшЇЄр т яшъёхы▀ї
; mov ecx, eax
; push eax
; mcall 48, 12, ecx ;яЁшьхэ▀хь ЁрчьхЁ °ЁшЇЄр
; pop eax
; pop ecx ebx
;temp fix - фхышь эр Єхъє∙шщ ЁрчьхЁ °ЁшЇЄр and -1
; push ebx edx
; mov ebx, 9
;div ebx
; pop edx ebx
;cmp eax, 0
;je .end
;dec eax
mov eax, 0 ;xor eax, eax ;test temp
jmp .end
.auto: ;a - т√ёЄрты▀хь т чртшёшьюёЄш юЄ ЁрчЁх°хэш▀ ¤ъЁрэр
;!!!
mcall 14
push ebx
xor ebx, ebx
mov bx, ax
shr eax, 16
cmp ax, bx ;яюыєўрхь сюы№°шщ ЁрчьхЁ ёЄюЁюэ√
jae .a
mov ax, bx
.a:
pop ebx
cmp ax, 1919 ;ЁрчьхЁ√ яюыєўхээ√х т√°х юЄ 0 ш эр 1 ьхэ№°х
jb .size0
cmp ax, 2047
jb .size1
cmp ax, 4095
jb .size2
cmp ax, 8191
jb .size3
jmp .size4
.size0:
mov eax, 0
jmp .end
.size1:
mov eax, 1
jmp .end
.size2:
mov eax, 2
jmp .end
.size3:
mov eax, 3
jmp .end
.size4:
mov eax, 4
jmp .end
.size5:
mov eax, 5
jmp .end
.size6:
mov eax, 6
jmp .end
.size7:
mov eax, 7
jmp .end
;.default:
; mov eax, 1
.end:
mov byte[mysize], al ;mov dword[mysize], eax
pop eax
ret
readScanKey:
;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых
cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю
ja .default ;эрёЄЁющъш яю єьюыўрэш■
cmp byte[eax], 10
je @f
cmp byte[eax], 0
je @f
cmp byte[eax], 13
je @f
push ecx ebx esi
mov ecx, 0 ;xor ecx, ecx
mov esi, keystr.data
.copy:
mov bl, byte[eax]
cmp bl, 0
je .copyEnd
cmp bl, 10
je .copyEnd
cmp bl, 13
je .copyEnd
cmp esi, keystr.size-1
jae .copyEnd
mov byte[esi], bl
inc esi
inc eax
inc ecx
jmp .copy
.copyEnd:
mov byte[esi], 0
mov dword[keystr.size], ecx
pop esi ebx ecx
jmp .end
@@:
inc eax
jmp readScanKey
.default:
mov byte[keyscan], 57
mov word[keystr.data], '57'
mov byte[keystr.data+2], 0
mov dword[keystr.size], 2
.end:
ret
readOptKey: ;1;3;4;5 - space or shift
;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых
cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю
ja .default ;эрёЄЁющъш яю єьюыўрэш■
cmp byte[eax], 10
je @f
cmp byte[eax], 0
je @f
cmp byte[eax], 13
je @f
;шэрўх ўшЄрхь ъыртш°є ш т√їюфшь
cmp dword[eax], 'Ctrl'
jne .notCtrl
mov byte[hkSymbol], 3
mov dword[hkSize], 4
jmp .end
.notCtrl:
cmp dword[eax], 'Shif'
jne .notShift
mov byte[hkSymbol], 2
mov dword[hkSize], 5
jmp .end
.notShift:
cmp dword[eax], 'Spac'
jne .notSpace
mov byte[hkSymbol], 32
mov dword[hkSize], 5
jmp .end
.notSpace:
cmp word[eax], 'Al'
jne .notAlt
mov byte[hkSymbol], 1
mov dword[hkSize], 3
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[hkSymbol], bl
mov dword[hkSize], 1
pop ebx
jmp .end
@@:
inc eax
jmp readOptKey
.default:
mov byte[hkSymbol], 32
mov dword[hkSize], 5
.end:
mov byte[hkSymbol+1], 0
ret
;яЁюїюфшь фю ъюэЎр Єхъє∙хщ ёЄЁюъш
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
readOptRadius:
;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых
cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю
ja .default ;эрёЄЁющъш яю єьюыўрэш■
cmp byte[eax], 10
je @f
cmp byte[eax], 0
je @f
cmp byte[eax], 13
je @f
;шэрўх ёўшЄ√трхь чэрўхэшх
push ebx ecx
xor ecx, ecx
.readValue:
mov bl, byte[eax]
mov byte[radiusBuffer.data+ecx], bl
inc ecx
inc eax
cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю т√їюф
ja .readEnd
cmp byte[eax], 10
je .readEnd
cmp byte[eax], 0
je .readEnd
cmp byte[eax], 13
je .readEnd
cmp ecx, 6
jae .readEnd
jmp .readValue
.readEnd:
mov byte[radiusBuffer.data+ecx], 0
mov dword[radiusBuffer.size], ecx
pop ecx ebx
jmp .end
@@:
inc eax
jmp readOptRadius
.default:
mov byte[radiusBuffer.data], '0'
mov byte[radiusBuffer.data+1], 0
mov dword[radiusBuffer.size], 1
.end:
ret
readOptSize:
;яЁюяєёърхь яхЁхэюё√ ёЄЁюъ т эрўрых
cmp eax, edx ;хёыш Їрщы чръюэўшыё▀, Єю
ja .default ;эрёЄЁющъш яю єьюыўрэш■
cmp byte[eax], 10
je @f
cmp byte[eax], 0
je @f
cmp byte[eax], 13
je @f
;яЁютхЁ▀хь, ўЄю ¤Єю фюяєёЄшьюх чэрўхэшх: 1-7, a, s
cmp byte[eax], 'a'
je .setValue
cmp byte[eax], 's'
je .setValue
cmp byte[eax], '0'
je .setValue
cmp byte[eax], '1'
je .setValue
cmp byte[eax], '2'
je .setValue
cmp byte[eax], '3'
je .setValue
cmp byte[eax], '4'
je .setValue
cmp byte[eax], '5'
je .setValue
cmp byte[eax], '6'
je .setValue
cmp byte[eax], '7'
je .setValue
jmp .default ;шэрўх ёЄртшь чэрўхэшх яю єьюыўрэш■
.setValue:
push ebx
mov bl, byte[eax]
mov byte[sizeStyle], bl
pop ebx
jmp .end
@@:
inc eax
jmp readOptSize
.default:
mov byte[sizeStyle], 's' ;ёшёЄхьэ√щ
.end:
ret
updateParams: ;max, size, pos
push eax
mov eax, dword[dataBuffer.size1]
mov dword[editLU.size], eax
mov dword[editLU.pos], eax
mov eax, dword[dataBuffer.size2]
mov dword[editLD.size], eax
mov dword[editLD.pos], eax
mov eax, dword[dataBuffer.size3]
mov dword[editRU.size], eax
mov dword[editRU.pos], eax
mov eax, dword[dataBuffer.size4]
mov dword[editRD.size], eax
mov dword[editRD.pos], eax
mov eax, dword[radiusBuffer.size]
mov dword[editRadius.size], eax
mov dword[editRadius.pos], eax
pop eax
ret
selfName db 'HACONFIG', 0
selfNameSize = 8 ;фю 11 byte
;
compareBytes:
push edi esi ecx ebx
mov eax, 0 ;xor eax, eax
mov ecx, selfNameSize ;max ЁрчьхЁ ёЄЁюъ 11
@@:
mov bl, byte[edi]
cmp bl, byte[esi]
jne compareBytes.no
inc edi
inc esi
cmp ecx, 0
je @f
dec ecx
jmp @b
.no:
mov eax, 1
@@:
pop ebx ecx esi edi
ret
;
slotMax dd 0
selfPID dd 0
buf db 1024 dup(0)
copyKill:
push eax ebx ecx esi edi
;ёяхЁтр яЁюўЄ▐ь ётю■ шэЇюЁьрЎш■
mcall 9, buf, -1
mov eax, dword[buf+30]
mov dword[selfPID], eax
;єърчрЄхыш, ъюЄюЁ√х эшъюуфр эх ьхэ▀■Єё▀:
mov esi, selfName ;яхЁтр▀ ёЄЁюър - шь▀ Єхъє∙хую яЁшыюцхэш▀
mov edi, buf ;тЄюЁр▀ ёЄЁюър - шь▀ Єхъє∙хую ёыюЄр
add edi, 10
mov ecx, 1
@@:
mcall 9, buf, ecx
mov dword[slotMax], eax
;хёыш ¤Єю ь√ ёрьш, Єю яЁюяєёърхь яЁютхЁъє
mov eax, dword[buf+30]
cmp eax, dword[selfPID]
je copyKill.propusk
call compareBytes ;ёЁртэштрхь 11 срщЄ ёЄЁюъ, Ёхчєы№ЄрЄ т eax
cmp eax, 0
je copyKill.selfKill
.propusk:
inc ecx
cmp ecx, dword[slotMax]
ja @f
jmp @b
.selfKill:
pop edi esi ecx ebx eax
mcall -1
ret
@@:
pop edi esi ecx ebx eax
ret
WindowsWidth = 550
WindowsHeight = 235
coord: ;ъююЁфшэрЄ√ юъэр яЁшыюцхэш▀
.y dw 0
.x dw 0
draw_window:
mcall 12, 1 ; Start window redraw
;юЄюсЁрчшь юъэю яю ЎхэЄЁє ¤ъЁрэр фы▀ ¤Єюую:
mcall 14 ;яюыєўшь ЁрчьхЁ√ ¤ъЁрэр
mov dword[coord], eax ;яюыюцшь ЁрчьхЁ√ ¤ъЁрэр т ъююЁфшэрЄ√
shr word[coord.x], 1 ;тхЁэхх яюыюцшь шї яюыютшэє
shr word[coord.y], 1
;т√ўшёы▀хь ъююЁфшэрЄ√ юъэр, ўЄюс√ юъэю с√ыю яю ёхЁхфшэх ¤ъЁрэр
sub word[coord.x], WindowsWidth/2
sub word[coord.y], WindowsHeight/2
mov eax, 0 ; function 0 : define and draw window
mov ebx, 0 ; [x start] *65536 + [x size]
mov bx, word[coord.x]
shl ebx, 16
mov bx, WindowsWidth
mov ecx, 0
mov cx, word[coord.y] ; [y start] *65536 + [y size]
shl ecx, 16
mov cx, WindowsHeight
mov edx, 0x14ffffff ; color of work area RRGGBB
; 0x02000000 = window type 4 (fixed size, skinned window)
mov esi, 0x808899ff ; color of grab bar RRGGBB
; 0x80000000 = color glide
mov edi, title
mcall
invoke edit_box_draw, editLU ;Ёшёютрэшх edit box'ют
invoke edit_box_draw, editLD
invoke edit_box_draw, editRU
invoke edit_box_draw, editRD
;Ёшёєхь ъэюяъє ш хх ЄхъёЄ
buttonAppleY = WindowsHeight-40
mcall 8, <WindowsWidth-120-Otstup, 120>, <buttonAppleY, 27>, 2, 0x00AABBCC
mcall 4, <WindowsWidth-120-Otstup+27, buttonAppleY+6>, 0x10FFFFFF, buttonText, buttonTextSize
;Ёшёєхь х∙▐ 4 ъэюяъш фы▀ фшрыюуютюую юъэр т√сюЁр Їрщыр
;эюьхЁр 4,5,6 ш 7
buttonW = 30
buttonH = 21
;ыхт√щ тхЁїэшщ єуюы
mcall 8, <Otstup,buttonW>, <85,buttonH>, 4, 0x00AABBCC
;ыхт√щ эшцэшщ єуюы
mcall 8, <Otstup,buttonW>, <120,buttonH>, 5
;яЁрт√щ тхЁїэшщ єуюы
mcall 8, <WindowsWidth-Otstup-buttonW,buttonW>, <85,buttonH>, 6
;яЁрт√щ эшцэшщ єуюы
mcall 8, <WindowsWidth-Otstup-buttonW,buttonW>, <120,buttonH>, 7
;Ёшёєхь ЄхъёЄ√ фы▀ ¤Єшї 4 ъэюяюъ
mov ecx, 0xFFFFFF ;схы√щ ЎтхЄ ЄхъёЄр
mov edx, commonButtonText ;ёЄЁюър ЄхъёЄр
mov esi, commonButtonTextSize ;ЁрчьхЁ ЄхъёЄр т ёшьтюырї
;ъююЁфшэрЄ√ ЄхъёЄр (x, y)
deltaCommonTextX = 7
deltaCommonTextY = 6
mcall 4, <Otstup+deltaCommonTextX, 85+deltaCommonTextY>
mcall 4, <Otstup+deltaCommonTextX, 120+deltaCommonTextY>
mcall 4, <WindowsWidth-Otstup-buttonW+deltaCommonTextX, 85+deltaCommonTextY>
mcall 4, <WindowsWidth-Otstup-buttonW+deltaCommonTextX, 120+deltaCommonTextY>
;delete mode button, if it exist
mov edx, 0x80000008
mcall 8
;draw button Mode
buttonModeX = 30 ;433
buttonModeY = 160 ;50
buttonModeWidth = 300
buttonModeHeight = 20
buttonModeTextYoffset = 3
buttonModeTextXoffset = 5
mcall 8, <buttonModeX,buttonModeWidth>, <buttonModeY,buttonModeHeight>, 8, 0x00FFFFFF
mcall 13, <buttonModeX+2+buttonModeWidth-20, 20-2>, <buttonModeY+1, buttonModeHeight-2>, 0xAABBCC
;draw text for button Mode
mov ebx, (buttonModeX+buttonModeTextXoffset) * 65536 + (buttonModeY+buttonModeTextYoffset) ;(x, y)
mov ecx, 0x10000000
call setTextModeMenu
mov esi, valueModeMenuSize
mcall 4
mov ebx, (buttonModeX+buttonModeWidth-12) * 65536 + (buttonModeY+buttonModeTextYoffset+3)
mov ecx, 0x80FFFFFF
mov edx, symbolDownArrow
mcall 4
;ъэюяър т√сюЁр уюЁ▀ўхщ ъыртш°ш
buttonHotKeyX = 350-10
buttonHotKeyWidth = 90
mov edx, 0x80000009 ;єфры▀хь
mcall 8
cmp byte[mode], 49 ;Ёшёєхь т√сюЁ ъыртш°ш, Єюы№ъю хёыш mode > 1
jbe @f
;Ёшёєхь эютє■
push eax ebx ecx edx esi
mov ebx, buttonHotKeyX*65536 + buttonHotKeyWidth ;X + Width
mov ecx, buttonModeY*65536 + buttonModeHeight ;Y + Height
mov edx, 0x00000009 ;button id
mov esi, 0x00FFFFFF ;color button
mcall 8
pop esi edx ecx ebx eax
;ЄхъёЄ яюфёърчъш фы▀ уюЁ▀ўхщ ъыртш°ш
mov ebx, (buttonHotKeyX+buttonModeTextXoffset) * 65536 + (buttonModeY+buttonModeTextYoffset) ;(x, y)
mov ecx, 0x90224466
call setTextForHotKey
mov esi, valueModeMenuSize
mcall 4
;чруюыютюъ
push eax ebx ecx edx edi esi
mov ebx, buttonHotKeyX * 65536 + (buttonModeY-11)
mov ecx, 0x80224466
mov edx, hkCaption
mov esi, 3
mcall 4
pop esi edi edx ecx ebx eax
@@:
;юЄюсЁрцрхь эрёЄЁющъє Ёрфшєёр фхщёЄтш▀ цхёЄр, Єюы№ъю хёыш т√сЁрэ Ёхцшь 3
cmp byte[mode], 51
jne @f
;чруюыютюъ
push eax ebx ecx edx edi esi
mov ebx, (buttonHotKeyX + buttonHotKeyWidth + 20) * 65536 + (buttonModeY-11)
mov ecx, 0x80224466
mov edx, radiusCaption
mov esi, 3
mcall 4
pop esi edi edx ecx ebx eax
invoke edit_box_draw, editRadius
@@:
call draw_super_text
LineLength = 62
mov ebx, Otstup * 65536 + 32 ; draw info text with function 4 (x, y)
;xor ecx, ecx
;mov cl, 1 ;byte[mysize]
;shl ecx, 24
;add ecx, 0x224466
;or ecx, 0x00224466 ;80224466
mov ecx, 0x10224466
mov edx, text
mov esi, LineLength
mov eax, 4
.newline: ; text from the DATA AREA
mcall
add ebx, 15
add edx, LineLength
cmp byte[edx], 0
jne .newline
mcall 12, 2 ; End window redraw
ret
hkSymbol: db 0, 0
setTextForHotKey:
push eax
mov al, byte[hkSymbol]
cmp al, 0
jne @f
mov edx, hkHint
mov dword[hkSize], 5 ;чэрўхэшх яю єьюыўрэш■ SPACE ;shift
jmp setTextForHotKey.end
@@:
cmp al, 1
jne @f
mov edx, hkAlt
mov dword[hkSize], 3
jmp setTextForHotKey.end
@@:
cmp al, 2
jne @f
mov edx, hkShift
mov dword[hkSize], 5
jmp setTextForHotKey.end
@@:
cmp al, 3
jne @f
mov edx, hkCtrl
mov dword[hkSize], 4
jmp setTextForHotKey.end
@@:
cmp al, 32
jne @f
mov edx, hkSpace
mov dword[hkSize], 5
jmp setTextForHotKey.end
@@:
cmp al, 96 ;'`'
je setTextForHotKey.symb
cmp al, 126 ;'~'
je setTextForHotKey.symb
cmp al, 48 ;'0'
jb @f
cmp al, 57 ;'9'
ja @f
.symb:
mov edx, hkSymbol
mov dword[hkSize], 1
jmp setTextForHotKey.end
@@:
cmp al, 97 ;'a'
jb @f
cmp al, 122 ;'z'
ja @f
;jmp setTextForHotKey.symb
mov edx, hkSymbol
mov dword[hkSize], 1
jmp setTextForHotKey.end
@@:
cmp al, 65 ;'A'
jb @f
cmp al, 90 ;'Z'
ja @f
;jmp setTextForHotKey.symb
mov edx, hkSymbol
mov dword[hkSize], 1
jmp setTextForHotKey.end
@@:
mov word[hkSymbol], 0 ;хёыш цх яюярыю ўЄю-Єю эхшчтхёЄэюх, Єю ёюЄЁ▐ь хую
mov edx, hkHint
mov dword[hkSize], 5 ;shift or space - чэрўхэшх яю єьюыўрэш■
.end:
pop eax
ret
setTextModeMenu:
cmp byte[mode], 48
jne @f
mov edx, valueModeMenu0
ret
@@:
cmp byte[mode], 49
jne @f
mov edx, valueModeMenu1
ret
@@:
cmp byte[mode], 50
jne @f
mov edx, valueModeMenu2
ret
@@:
cmp byte[mode], 51
jne @f
mov edx, valueModeMenu3
ret
@@:
mov edx, valueModeMenu1
ret
saveKey:
cmp word[hkSymbol], 0
je .default
cmp byte[hkSymbol], 1
je .alt
cmp byte[hkSymbol], 2
je .shift
cmp byte[hkSymbol], 3
je .ctrl
cmp byte[hkSymbol], 32
je .space
.other:
mov esi, hkSymbol
mov byte[esi+1], 0
mov dword[hkSize], 1
jmp .end
.space:
mov esi, hkSpace
mov dword[hkSize], 5
jmp .end
.ctrl:
mov esi, hkCtrl
mov dword[hkSize], 4
jmp .end
.alt:
mov esi, hkAlt
mov dword[hkSize], 3
jmp .end
.default:
.shift:
mov esi, hkShift
mov dword[hkSize], 5
.end:
mov ebx, hkSize ;єърчрЄхы№ эр dword[hkSize]
call copyParam
ret
align 16
@IMPORT:
library box_lib, 'box_lib.obj'
import box_lib,\
edit_box_draw, 'edit_box_draw',\
edit_box_key, 'edit_box_key',\
edit_box_mouse, 'edit_box_mouse',\
init_checkbox, 'init_checkbox2',\
check_box_draw, 'check_box_draw2',\
check_box_mouse, 'check_box_mouse2',\
option_box_draw, 'option_box_draw',\
option_box_mouse, 'option_box_mouse'
commonButtonText db '...', 0 ;ЄхъёЄ фы▀ ъэюяюъ т√чютр OpenDial
commonButtonTextSize = 3
if lang eq ru_RU ;хёыш ▀ч√ъ ёсюЁъш Ёєёёъшщ
text db "Конфигуратор Hot Angles отвечает за настройку активных углов. "
db "Настройте параметры под себя или отключите эту опцию. "
db " ", 0
hed:
title db "Конфигуратор утилиты Hot Angles", 0
buttonText db "Применить", 0
buttonTextSize = 9
ch_text db 'Включить/активировать "Hot Angles"', 0
superText:
.lu db 'Команда левого верхнего угла: ', 0
.ld db 'Команда левого нижнего угла: ', 0
.ru db 'Команда правого верхнего угла:', 0
.rd db 'Команда правого нижнего угла: ', 0
superTextSize = 30
valueModeMenuSize = 32
ModeMenu db 'Режим работы:',0
valueModeMenu0 db 'отключено ',0
valueModeMenu1 db 'классический режим ',0
valueModeMenu2 db 'режим горячей клавиши ',0
valueModeMenu3 db 'режим жеста по клавише активации',0
hkCaption: db 'Клавиша:',0
;hkHint: db 'Нажмите любую клавишу',0
radiusCaption: db 'Радиус:',0
else ;шэрўх рэуышщёъшщ ЄхъёЄ
text db "This is a Hot Angles Configurator. "
db "Set the parameters bellow for yourself or disable this option."
db " ", 0
hed:
title db "Hot Angles Configurator", 0
buttonText db " Apply ", 0
buttonTextSize = 9
ch_text db 'Activate "Hot Angles"',0 ;ёюяЁютюцфр■∙шщ ЄхъёЄ фы▀ ўхъ сюъёр
superText:
.lu db 'Left up angle command: ', 0
.ld db 'Left down angle command: ', 0
.ru db 'Right up angle command: ', 0
.rd db 'Right down angle command:', 0
superTextSize = 25
valueModeMenuSize = 32
ModeMenu db 'Mode:',0
valueModeMenu0 db 'disabled ',0
valueModeMenu1 db 'classic mode ',0
valueModeMenu2 db 'hot key mode ',0
valueModeMenu3 db 'activation key gesture mode ',0
hkCaption: db 'Key:',0
;hkHint: db 'press any key',0
radiusCaption: db 'Radius:',0
end if
hkAlt: db 'Alt',0
hkShift: db 'Shift',0
hkCtrl: db 'Ctrl',0
hkSpace: db 'Space',0
hkHint: db '?',0
hkSize: rd 1 ;ЁрчьхЁ ёЄЁюъш ё шьхэхь ъыртш°ш
draw_super_text:
push eax ebx ecx edx edi esi
mov ecx, 0
mov ch, byte[mysize]
shl ecx, 16
add ecx, 0x224466
mcall 4, <Otstup,74> ,,superText.lu,superTextSize
mcall 4, <Otstup,109>,,superText.ld,superTextSize
mcall 4, <290,74> ,,superText.ru,superTextSize
mcall 4, <290,109> ,,superText.rd,superTextSize
mov ebx, Otstup * 65536 + (buttonModeY-11)
or ecx, 0x80000000
mov edx, ModeMenu
mov esi, 3
mcall 4
; mov ebx, buttonHotKeyX * 65536 + (buttonModeY-11)
; or ecx, 0x80000000
; mov edx, hkCaption
; mov esi, 3
; mcall 4
pop esi edi edx ecx ebx eax
ret
editID db 0
initEBX:
cmp byte[editID], 4
jne @f
mov ebx, dataBuffer.1
ret
@@:
cmp byte[editID], 5
jne @f
mov ebx, dataBuffer.2
ret
@@:
cmp byte[editID], 6
jne @f
mov ebx, dataBuffer.3
ret
@@:
cmp byte[editID], 7
jne @f
mov ebx, dataBuffer.4
ret
@@:
ret
setRESULT:
cmp byte[editID], 4
jne @f
mov dword[dataBuffer.size1], ecx
mov dword[editLU.size], ecx
mov dword[editLU.pos], ecx
ret
@@:
cmp byte[editID], 5
jne @f
mov dword[dataBuffer.size2], ecx
mov dword[editLD.size], ecx
mov dword[editLD.pos], ecx
ret
@@:
cmp byte[editID], 6
jne @f
mov dword[dataBuffer.size3], ecx
mov dword[editRU.size], ecx
mov dword[editRU.pos], ecx
ret
@@:
cmp byte[editID], 7
jne @f
mov dword[dataBuffer.size4], ecx
mov dword[editRD.size], ecx
mov dword[editRD.pos], ecx
ret
@@:
ret
copyPath:
push eax ebx ecx edx ;copy file name path
mov eax, openfile_path ;dword[OpenDialog_data.openfile_path]
call initEBX ;mov ebx, dataBuffer.1 ;.data
mov ecx, 0
@@:
mov dl, byte[eax]
cmp dl, 0 ;byte[eax], 0
je @f
mov byte[ebx], dl
inc eax
inc ebx
inc ecx
jmp @b
@@:
mov byte[ebx], 0
call setRESULT
pop edx ecx ebx eax
ret
IntToStr: ;in esi - ёЄЁюър; eёx - ўшёыю
push eax ecx edx esi
or ecx, ecx
jnz @f
mov byte[esi], '0'
inc esi
jmp .end
@@:
mov eax, ecx
mov ecx, 10
.next:
xor edx, edx
div ecx
add edx, '0'
mov byte[esi], dl
inc esi
or eax, eax
jz .end
jmp .next
.end:
mov byte[esi], 0 ;ъырф▐ь чртхЁ°р■∙шщ эюы№
pop esi edx ecx eax
call reverseString ;фхырхь ЁхтхЁё ёЄЁюъш
ret
;тїюф: esi - єърчрЄхы№ эр ёЄЁюъє
reverseString:
push eax esi edi
mov al, byte[esi] ;хёыш ёЄЁюър яєёЄр▀ Єю т√їюфшь ЁхтхЁё фхырЄ№ эх эрфю
cmp al, 0
je reverseString.end
mov edi, esi ;шэрўх эрщф▐ь яючшЎш■ яюёыхфэхую ёшьтюыр ёЄЁюъш ш яюыюцшь х▐ т edi
.go_last_symbol:
mov al, byte[edi+1]
cmp al, 0
je @f
inc edi
jmp reverseString.go_last_symbol
@@:
push ebx
.rev:
cmp esi, edi
jae @f
;ьхэ▀хь ьхёЄрьш ёшьтюы√ т Ўшъых
mov al, byte[edi]
mov bl, byte[esi]
mov byte[edi], bl
mov byte[esi], al
inc esi
dec edi
jmp reverseString.rev
@@:
pop ebx
.end:
pop edi esi eax
ret
align 4
but_open_dlg:
pushad
copy_path open_dialog_name,communication_area_default_path,file_name,0
mov [OpenDialog_data.type],0
stdcall[OpenDialog_Start], OpenDialog_data
cmp [OpenDialog_data.status],2
je @f
cmp [OpenDialog_data.status],0 ;яюы№чютрЄхы№ эрцры Cancel?
je .end_open
;ъюф яЁш єфрўэюь юЄъЁ√Єшш фшрыюур
call copyPath
jmp .end_open
@@:
;ъюф яЁш эх єфрўэюь юЄъЁ√Єшш фшрыюур
;...
.end_open:
popad
ret
;фрээ√х фы▀ фшрыюур юЄъЁ√Єш▀ Їрщыют
align 4
OpenDialog_data:
.type dd 0 ;0 - юЄъЁ√Є№, 1 - ёюїЁрэшЄ№, 2 - т√сЁрЄ№ фшЁхъЄюЁш■
.procinfo dd pi
.com_area_name dd communication_area_name ;+8
.com_area dd 0 ;+12
.opendir_path dd plugin_path ;+16
.dir_default_path dd default_dir ;+20
.start_path dd file_name ;+24 яєЄ№ ъ фшрыюує юЄъЁ√Єш▀ Їрщыют
.draw_window dd draw_window ;+28
.status dd 0 ;+32
.openfile_path dd openfile_path ;+36 яєЄ№ ъ юЄъЁ√трхьюьє Їрщыє
.filename_area dd filename_area ;+40
.filter_area dd Filter
.x:
.x_size dw 420 ;+48 ; Window X size
.x_start dw 10 ;+50 ; Window X position
.y:
.y_size dw 320 ;+52 ; Window y size
.y_start dw 10 ;+54 ; Window Y position
default_dir db '/sys',0 ;фшЁхъЄюЁш▀ яю єьюыўрэш■
communication_area_name: db 'FFFFFFFF_open_dialog',0
open_dialog_name: db 'opendial',0
communication_area_default_path: db '/sys/File managers/',0
Filter:
dd Filter.end - Filter.1
.1:
;db 'KEX',0
.end:
db 0
mode db 49 ;'1'
modeMenu dd 0
coordModeMenu:
.x dw 100
.y dw 200
system_dir0 db '/sys/lib/'
lib0_name db 'proc_lib.obj',0
system_dir1 db '/sys/lib/'
lib1_name db 'kmenu.obj',0
symbolDownArrow db 25,0
;library structures
l_libs_start:
lib0 l_libs lib0_name, file_name, system_dir0, import_proclib
lib1 l_libs lib1_name, file_name, system_dir1, import_libkmenu
load_lib_end:
edMaxSize = 510 ;ЄхяхЁ№ ё эют√ь ъюьяюэхэЄюь ьюцэю ш 511 єърчрЄ№
edMax = 0 ;max, size, pos
align 4
editLU edit_box 230-buttonW,Otstup+buttonW,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.1, mouse_dd, 0, edMax, edMax ;ed_focus
editLD edit_box 230-buttonW,Otstup+buttonW,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.2, mouse_dd, 0, edMax, edMax
editRU edit_box 230-buttonW,290,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.3, mouse_dd, 0, edMax, edMax
editRD edit_box 230-buttonW,290,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, edMaxSize, dataBuffer.4, mouse_dd, 0, edMax, edMax
editRadius edit_box 40,(buttonHotKeyX + buttonHotKeyWidth + 20),buttonModeY, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0x10000000, 4, radiusBuffer.data, mouse_dd, ed_figure_only, edMax, edMax
align 4
import_proclib:
OpenDialog_Init dd aOpenDialog_Init
OpenDialog_Start dd aOpenDialog_Start
dd 0,0
aOpenDialog_Init db 'OpenDialog_init',0
aOpenDialog_Start db 'OpenDialog_start',0
align 4
import_libkmenu:
kmenu_init dd akmenu_init
kmainmenu_draw dd akmainmenu_draw
kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent
ksubmenu_new dd aksubmenu_new
ksubmenu_delete dd aksubmenu_delete
ksubmenu_draw dd aksubmenu_draw
ksubmenu_add dd aksubmenu_add
kmenuitem_new dd akmenuitem_new
kmenuitem_delete dd akmenuitem_delete
kmenuitem_draw dd akmenuitem_draw
dd 0,0
akmenu_init db 'kmenu_init',0
akmainmenu_draw db 'kmainmenu_draw',0
akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0
aksubmenu_new db 'ksubmenu_new',0
aksubmenu_delete db 'ksubmenu_delete',0
aksubmenu_draw db 'ksubmenu_draw',0
aksubmenu_add db 'ksubmenu_add',0
akmenuitem_new db 'kmenuitem_new',0
akmenuitem_delete db 'kmenuitem_delete',0
akmenuitem_draw db 'kmenuitem_draw',0
sc system_colors
mouse_dd rd 1
sizeStyle: rb 1 ;ЁрчьхЁ ЄхъёЄр ш юёЄры№э√ї ¤ыхьхэЄют юъэр
mysize: rb 1 ;rd 1
radiusBuffer: ;сєЇхЁ фы▀ яюы▀ Ёрфшєёр цхёЄр
.data: rb 6
.size: rd 1
radiusBufferEnd:
button_press rd 0 ;for kmenu
sys_path: rb 4096
file_name: rb 4096
plugin_path: rb 4096
openfile_path: rb 4096
filename_area: rb 256
rb 1024
pi process_information
keyscan: rb 1
keystr:
.data: rb 4 ;ёЄЁюър ёю чэрўхэшхь ёърэъюфр ръЄштрЎшюээющ ъыртш°ш
.size: rd 1 ;ЁрчьхЁ ёюфхЁцшьюую ёЄЁюъш схч яюёыхфэхую эєы▀
dataBuffer:
.1: rb 512
.2: rb 512
.3: rb 512
.4: rb 512
.size1: rd 1
.size2: rd 1
.size3: rd 1
.size4: rd 1
;255+255+2 = 512
;фтр чрярёэ√ї срщЄр эхюсїюфшь√ фы▀ Єюую ўЄю с√ эх яхяхЁхяшёрЄ№ ёыхфє■∙шхщ срщЄ√, т ъюэЎх сєЇхЁр 0
dataBufferEnd:
I_END:
rb 4096
align 16
STACKTOP:
MEM: