;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Hot Angles Config ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Compile with FASM
; Version 0.3.6: Oct 9, 2018
; 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, 0
; ═рўрыю юсырёЄш ъюфр
include 'lang.inc' ;яюффхЁцър ч√ъют яЁш ъюьяшы Ўшш
include '../../macros.inc'
include '../../proc32.inc'
include '../../dll.inc'
include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;ъюьяюэхэЄ√ checkBox ш editBox
include '../../develop/libraries/box_lib/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
;invoke init_checkbox, ch1
mov eax,40 ;єёЄрэютшЄ№ ьрёъє фы юцшфрхь√ї ёюс√Єшщ
mov ebx,0x27 ;ёшёЄхьр сєфхЄ ЁхрушЁютрЄ№ Єюы№ъю эр ёююс∙хэшх ю яхЁхЁшёютъх, эрцрЄр ъэюяър, юяЁхфхы╕ээр Ёрэхх, ёюс√Єшх юЄ ь√°ш (ўЄю-Єю ёыєўшыюё№ - эрцрЄшх эр ъэюяъє ь√°ш шыш яхЁхьх∙хэшх; ёсЁрё√трхЄё яЁш яЁюўЄхэшш)
mcall
load_libraries l_libs_start,load_lib_end ;чруЁєчър сшсышюЄхъ(ш)
;mcall 48,3,sc,sizeof.system_colors ;яюыєўшЄ№ ёшёЄхьэ√х ЎтхЄр
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
;invoke check_box_mouse, ch1 ;яЁютхЁър ўхъ сюъёр
;stdcall [kmainmenu_dispatch_cursorevent], [modeMenu] ;яЁютхЁър ь√°ш фы ъюьсюсюъёр
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
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 + 17 ;20 ;42
mov word[coordModeMenu.y], ax
stdcall [ksubmenu_draw], [modeMenu], coordModeMenu
pop ecx ebx eax
jmp 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/HOTANGLES.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,'/rd/1/HACONFIG',13,10,'/rd/1/HACONFIG',13,10,'/rd/1/HACONFIG',13,10,'/rd/1/HACONFIG',13,10
defaultDataSize = 48+19
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, 5*2+1 ;1 срщЄ эр ёюёЄю эшх ръЄштэюёЄш ш 5 ярЁ яхЁхэюёют ёЄЁюъ (ёшьтюы√ 13, 10)
add ecx, dword[editLU.size] ;яы■ё ЁрчьхЁ ърцфющ ёЄЁюъш т срщЄрї
add ecx, dword[editLD.size]
add ecx, dword[editRU.size]
add ecx, dword[editRD.size] ;dataBuffer.size4]
;хёыш чрфрэ√ яєёЄ√х ёЄЁюъш, Єю ь√ ртЄюьрЄшўхёъш фюсрты хь чэръ ьшэєё, чэрўшЄ ЁрчьхЁ +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 ;ёюїЁрэ хь рфЁхё сєЇхЁр т ёЄЁєъЄєЁє
;чряюыэшь сєЇхЁ ёюфхЁцшьюую:
;cmp byte[mode], 0
;jne @f
;@@:
;
push ebx ;ёюїЁрэ хь т√сЁрээ√щ Ёхцшь
mov bl, byte[mode]
mov byte[eax], bl
pop ebx
;; mov byte[eax], 48;'0' ;110; 'n' ;яю єьюыўрэш■ Їыру ёэ Є
;; cmp word[ch1.flags], 110b ;ch_flag_en and ch_flag_middle ;т√ёЄртыхэ checkBox шыш эхЄ?
;; jne applyButton.no
;; mov byte[eax], 49;'1' ;121 ;шэрўх ъырф╕ь 'y'
;;.no:
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 ;фюсрты хь яхЁхэюё ёЄЁюъш
pop ebx esi
mov ebx, createFile
mcall 70
cmp eax, 0
je .end
;шэрўх чфхё№ эєцэю т√тхёЄш юъэю ё ю°шсъющ !!!
.end:
mcall 68, 13, dword[createFile.data_adr] ;юётюсюцфрхь ярь Є№ яюф сєЇхЁ
call finishHotAnglesApp ;чртхЁ°рхь ЁрсюЄє тёхї ъюяшщ ёхЁтшёр @HOTANGLES
call loadConfig ;яхЁхчруЁєцрхь Їрщы ъюэЇшур
call draw_window ;яхЁхЁшёют√трхь юъэю
call startHotAnglesApp ;яхЁхчряєёърхь @HOTANGLES
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 ;хёыш эх ёютярыю, Єю яхЁхїюфшь эр ёыхфє■∙шщ ёыюЄ
;push eax ebx ecx
mcall 18, 2, ecx ;шэрўх чртхЁ°рхь ёыюЄ
;pop ecx ebx eax
.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 '/rd/1/'
.file_name db '@HOTANGLES', 0
;db 0
;.name: dd HotAnglesAppName
;HotAnglesAppName db '@HOTANGLES', 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
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
@@:
mov byte[mode], 49 ;'1' шэрўх яю єьюыўрэш■ тъы■ў╕э ъырёёшўхёъшщ Ёхцшь ЁрсюЄ√
.modeEnd:
pop ebx
;; cmp byte[eax], 49;'1' ;121 ;'y' ;т√ёЄрты хь checkBox - ярЁрьхЄЁ ръЄштэюёЄш яЁшыюцхэш
;; jne @f ;loadConfig.no
;;.yes:
;; mov word[ch1.flags], 110b ;ch_flag_en and ch_flag_middle
;; jmp loadConfig.chEnd
;;@@:
;; cmp byte[eax], 50;'2' ;тЄюЁющ Ёхцшь ръЄштшЁютрэ
;; je loadConfig.yes
;;.no:
;; mov word[ch1.flags], 100b ;ch_flag_middle
;;.chEnd:
;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
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 ;яЁшьхэ хь эрёЄЁющъш ърцфюую сєЇхЁр
pop edx ecx ebx eax
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
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 = 450
WindowsHeight = 195
coord: ;ъююЁфшэрЄ√ юъэр яЁшыюцхэш
.y dw 0
.x dw 0
draw_window:
;єфры хь ъэюяъє, хёыш хёЄ№
mov edx, 0x80000002
mcall 8
;єфры хь х∙╕ 4 ъэюяъш хёыш юэш хёЄ№
mov edx, 0x80000004
mcall 8
mov edx, 0x80000005
mcall 8
mov edx, 0x80000006
mcall 8
mov edx, 0x80000007
mcall 8
mov eax, 12 ; function 12: tell os about windowdraw
mov ebx, 1 ; 1, start of draw
mcall
;юЄюсЁрчшь юъэю яю ЎхэЄЁє ¤ъЁрэр фы ¤Єюую:
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
;invoke check_box_draw, ch1 ;Ёшёютрэшх ўхъсюъёют
;Ёшёєхь ъэюяъє
mov ebx, (WindowsWidth-80-Otstup)*65536 + 80 ;ъююЁфшэрЄр X, °шЁшэр ъэюяъш
mov ecx, 160*65536 + 20 ;ъююЁфшэрЄр Y, т√ёюЄр ъэюяъш
mov edx, 0x00000002 ;2 ;эюьхЁ ъэюяъш
mov esi, 0x00AABBCC ;ЎтхЄ ъэюяъш
mcall 8
;Ёшёєхь ЄхъёЄ ъэюяъш
mov ebx, (WindowsWidth-80-Otstup+25-buttonTextXoffset) * 65536 + 166 ;ъююЁфшэрЄ√ ЄхъёЄр (x, y)
mov ecx, 0xFFFFFF ;схы√щ ЎтхЄ ЄхъёЄр
mov edx, buttonText
mov esi, buttonTextSize ;5 ;ЁрчьхЁ ЄхъёЄр т ёшьтюырї
mcall 4
;Ёшёєхь х∙╕ 4 ъэюяъш фы фшрыюуютюую юъэр т√сюЁр Їрщыр
;эюьхЁр 4,5,6 ш 7
buttonH = 14 ;20
buttonW = 30
;ыхт√щ тхЁїэшщ єуюы
mov ebx, Otstup*65536 + buttonW ;ъююЁфшэрЄр X, °шЁшэр ъэюяъш
mov ecx, 85*65536 + buttonH ;ъююЁфшэрЄр Y, т√ёюЄр ъэюяъш
mov edx, 0x00000004 ;эюьхЁ ъэюяъш
mov esi, 0x00AABBCC ;ЎтхЄ ъэюяъш
mcall 8
;ыхт√щ эшцэшщ єуюы
mov ebx, Otstup*65536 + buttonW ;ъююЁфшэрЄр X, °шЁшэр ъэюяъш
mov ecx, 120*65536 + buttonH ;ъююЁфшэрЄр Y, т√ёюЄр ъэюяъш
mov edx, 0x00000005 ;эюьхЁ ъэюяъш
mov esi, 0x00AABBCC ;ЎтхЄ ъэюяъш
mcall 8
;яЁрт√щ тхЁїэшщ єуюы
mov ebx, (WindowsWidth-Otstup-buttonW)*65536 + buttonW ;ъююЁфшэрЄр X, °шЁшэр ъэюяъш
mov ecx, 85*65536 + buttonH ;ъююЁфшэрЄр Y, т√ёюЄр ъэюяъш
mov edx, 0x00000006 ;эюьхЁ ъэюяъш
mov esi, 0x00AABBCC ;ЎтхЄ ъэюяъш
mcall 8
;яЁрт√щ эшцэшщ єуюы
mov ebx, (WindowsWidth-Otstup-buttonW)*65536 + buttonW ;ъююЁфшэрЄр X, °шЁшэр ъэюяъш
mov ecx, 120*65536 + buttonH ;ъююЁфшэрЄр Y, т√ёюЄр ъэюяъш
mov edx, 0x00000007 ;эюьхЁ ъэюяъш
mov esi, 0x00AABBCC ;ЎтхЄ ъэюяъш
mcall 8
;Ёшёєхь ЄхъёЄ√ фы ¤Єшї 4 ъэюяюъ
mov ecx, 0xFFFFFF ;схы√щ ЎтхЄ ЄхъёЄр
mov edx, commonButtonText ;ёЄЁюър ЄхъёЄр
mov esi, commonButtonTextSize ;ЁрчьхЁ ЄхъёЄр т ёшьтюырї
;ъююЁфшэрЄ√ ЄхъёЄр (x, y)
deltaCommonTextX = 7
deltaCommonTextY = 2
mov ebx, (Otstup+deltaCommonTextX) * 65536 + (85 + deltaCommonTextY)
mcall 4
mov ebx, (Otstup+deltaCommonTextX) * 65536 + (120 + deltaCommonTextY)
mcall 4
mov ebx, (WindowsWidth-Otstup-buttonW+deltaCommonTextX) * 65536 + (85 + deltaCommonTextY)
mcall 4
mov ebx, (WindowsWidth-Otstup-buttonW+deltaCommonTextX) * 65536 + (120 + deltaCommonTextY)
mcall 4
;delete mode button, if it exist
mov edx, 0x80000008
mcall 8
;draw button Mode
buttonModeX = 30 ;433
buttonModeY = 160 ;50
buttonModeWidth = 221
buttonModeHeight = 20
buttonModeTextXoffset = 5
mov ebx, buttonModeX*65536 + buttonModeWidth ;X + Width
mov ecx, buttonModeY*65536 + buttonModeHeight ;Y + Height
mov edx, 0x00000008 ;button id
mov esi, 0x00AABBCC ;color button
mcall 8
;draw text for button Mode
mov ebx, (buttonModeX+buttonModeTextXoffset) * 65536 + (buttonModeY+6) ;(x, y)
mov ecx, 0xFFFFFF
call setTextModeMenu
mov esi, valueModeMenuSize
mcall 4
call draw_super_text
LineLength = 62
mov ebx, 40 * 65536 + 36 ; draw info text with function 4 (x, y)
mov ecx, 0x224466
mov edx, text
mov esi, LineLength
mov eax, 4
.newline: ; text from the DATA AREA
mcall
add ebx, 12
add edx, LineLength
cmp byte[edx], 0
jne .newline
mov eax, 12 ; function 12:tell os about windowdraw
mov ebx, 2 ; 2, end of draw
mcall
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
align 16
@IMPORT:
library box_lib, 'box_lib.obj'
import box_lib,\
edit_box_draw, 'edit_box',\
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'
;DATA фрээ√х check_box шёяюы№чєхЄ ёшёЄхьэ√х ЎтхЄр
;ъююЁфшэрЄ√ (x,y) = (30, 160) ЁрчьхЁ ўхъсюъёр 12, ЎтхЄ ЄхъёЄр 0x224466
;ch1 check_box2 30 shl 16 + 12, 160 shl 16 + 12, 6, 0xFFFFFFFF, 0xAABBCC, 0x224466, ch_text, 110b ; ch_flag_en and ch_flag_middle
commonButtonText db '...', 0 ;ЄхъёЄ фы ъэюяюъ т√чютр OpenDial
commonButtonTextSize = 3
if lang eq ru ;хёыш ч√ъ ёсюЁъш Ёєёёъшщ
text db "Конфигуратор Hot Angles отвечает за настройку активных углов. "
db "Настройте параметры под себя или отключите эту опцию. "
db " ", 0
hed:
title db "Конфигуратор утилиты Hot Angles", 0
buttonText db "Применить", 0
buttonTextSize = 9
buttonTextXoffset = 12
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
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 = 5
buttonTextXoffset = 0
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
end if
draw_super_text:
push eax ebx ecx edx edi esi
mov ebx, Otstup * 65536 + 74 ; draw info text with function 4 (x, y)
mov ecx, 0x224466
mov eax, superText.lu
mov edx, eax
mov esi, superTextSize
mcall 4
mov ebx, Otstup * 65536 + 109
mov edx, superText.ld
mov esi, superTextSize
mcall 4
mov ebx, 240 * 65536 + 74
mov edx, superText.ru
mov esi, superTextSize
mcall 4
mov ebx, 240 * 65536 + 109
mov edx, superText.rd
mov esi, superTextSize
mcall 4
mov ebx, Otstup * 65536 + (buttonModeY-11)
or ecx, 0x80000000
mov edx, ModeMenu
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
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 procinfo
.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 '/rd/1',0 ;фшЁхъЄюЁш яю єьюыўрэш■
communication_area_name: db 'FFFFFFFF_open_dialog',0
open_dialog_name: db 'opendial',0
communication_area_default_path: db '/rd/1/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
align 4
proclib_import: ;юяшёрэшх ¤ъёяюЁЄшЁєхь√ї ЇєэъЎшщ
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
head_f_i:
head_f_l db '╤шёЄхьэр ю°шсър',0
err_message_found_lib0 db '═х эрщфхэр сшсышюЄхър ',39,'proc_lib.obj',39,0
err_message_import0 db '╬°шсър яЁш шьяюЁЄх сшсышюЄхъш ',39,'proc_lib.obj',39,0
err_message_found_lib1 db '═х эрщфхэр сшсышюЄхър ',39,'kmenu.obj',39,0 ;'Не найдена библиотека '
err_message_import1 db '╬°шсър яЁш шьяюЁЄх сшсышюЄхъш ',39,'kmenu',39,0 ;'Ошибка при импорте библиотеки '
system_dir0 db '/sys/lib/'
lib0_name db 'proc_lib.obj',0
lib1_name db 'kmenu.obj',0
;library structures
l_libs_start:
lib0 l_libs lib0_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, proclib_import,err_message_import0, head_f_i
lib1 l_libs lib1_name, sys_path, file_name, system_dir0, err_message_found_lib1, head_f_l, import_libkmenu,err_message_import1,head_f_i
load_lib_end:
;!]
edMaxSize = 510 ;ЄхяхЁ№ ё эют√ь ъюьяюэхэЄюь ьюцэю ш 511 єърчрЄ№
edMax = 0 ;max, size, pos
align 4
editLU edit_box 180-buttonW,Otstup+buttonW,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.1, mouse_dd, 0, edMax, edMax ;ed_focus
editLD edit_box 180-buttonW,Otstup+buttonW,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.2, mouse_dd, 0, edMax, edMax
editRU edit_box 180-buttonW,240,85, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.3, mouse_dd, 0, edMax, edMax
editRD edit_box 180-buttonW,240,120, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, dataBuffer.4, mouse_dd, 0, edMax, edMax
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
mouse_dd dd ?
sc system_colors
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
procinfo process_information
pi rb 1024
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
;фтр чрярёэ√ї срщЄр эхюсїюфшь√ фы Єюую ўЄю с√ эх яхяхЁхяшёрЄ№ ёыхфє■∙шхщ срщЄ√, т ъюэЎх сєЇхЁр 0
dataBufferEnd:
I_END:
rb 4096
align 16
STACKTOP:
MEM: