forked from KolibriOS/kolibrios
a623f90476
git-svn-id: svn://kolibrios.org@7443 a494cfbc-eb01-0410-851d-a64ba20cac60
1202 lines
35 KiB
NASM
1202 lines
35 KiB
NASM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
; 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 "<22> áâன⥠¯ à ¬¥âàë ¯®¤ á¥¡ï ¨«¨ ®âª«îç¨â¥ íâã ®¯æ¨î. "
|
||
db " ", 0
|
||
hed:
|
||
title db "Š®ä¨£ãà â®à ã⨫¨âë Hot Angles", 0
|
||
buttonText db "<22>ਬ¥¨âì", 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 '<27>¥¦¨¬ à ¡®âë:',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 ;'<27>¥ ©¤¥ ¡¨¡«¨®â¥ª '
|
||
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:
|