;=============================================================================;
;============================[ HEADER ]===========================;
;=============================================================================;
use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd 0x100000
dd 0x100000
dd 0x0
dd 0x0
include '../../macros.inc'
;=============================================================================;
;============================[ EVENTS ]===========================;
;=============================================================================;
START:
mcall 40,0xC0000027 ; óñòàíàâëèâàåì ìàñêó ñîáûòèé
call button_init ; óñòàíàâëèâàåì ïàðàìåòðû êíîïîê
mov eax,48 ; Ôóíêöèÿ 48 - ñòèëè îòîáðàæåíèÿ îêîí
mov ebx,3 ; Ïîäôóíêöèÿ 3 - ïîëó÷èòü ñòàíäàðòíûå öâåòà îêîí.
mov ecx,sc ; Óêàçàòåëü íà áóôåð ðàçìåðîì edx áàéò, ïîä ñòðóêòóðó
mov edx,200 ; Ðàçìåð òàáëèöû öâåòîâ (äîëæåí áûòü 40 áàéò)
int 0x40 ; Ïðåðûâàíèå
mov eax,48 ; Ôóíêöèÿ 48 - ñòèëè îòîáðàæåíèÿ îêîí
mov ebx,2 ; Ïîäôóíêöèÿ 3 - ïîëó÷èòü ñòàíäàðòíûå öâåòà îêîí.
mov ecx,sc ; Óêàçàòåëü íà áóôåð ðàçìåðîì edx áàéò, ïîä ñòðóêòóðó
mov edx,200 ; Ðàçìåð òàáëèöû öâåòîâ (äîëæåí áûòü 40 áàéò)
int 0x40 ; Ïðåðûâàíèå
mov eax,48 ; Ôóíêöèÿ 48 - ñòèëè îòîáðàæåíèÿ îêîí
mov ebx,3 ; Ïîäôóíêöèÿ 3 - ïîëó÷èòü ñòàíäàðòíûå öâåòà îêîí.
mov ecx,sc ; Óêàçàòåëü íà áóôåð ðàçìåðîì edx áàéò, ïîä ñòðóêòóðó
mov edx,200 ; Ðàçìåð òàáëèöû öâåòîâ (äîëæåí áûòü 40 áàéò)
int 0x40 ; Ïðåðûâàíèå
red:
call draw_window
still:
mov eax,10 ; ôóíêöèÿ 10 - æäàòü ñîáûòèÿ
int 0x40
cmp eax,1 ; ïåðåðèñîâàòü îêíî ?
je red ; åñëè äà - íà ìåòêó red
cmp eax,2 ; íàæàòà êëàâèøà ?
je key ; åñëè äà - íà key
cmp eax,3 ; íàæàòà êíîïêà ?
je button ; åñëè äà - íà button
cmp eax,6
je mouse
jmp still ; åñëè äðóãîå ñîáûòèå - â íà÷àëî öèêëà
;end_still
key: ; íàæàòà êëàâèøà íà êëàâèàòóðå
mov eax,2 ; ôóíêöèÿ 2 - ñ÷èòàòü êîä ñèìâîëà (â ah) (òóò â ïðèíöèïå íå íóæíà)
int 0x40
jmp still ; âåðíóòüñÿ ê íà÷àëó öèêëà
;end_key
button:
mov eax,17 ; 17 - ïîëó÷èòü èäåíòèôèêàòîð íàæàòîé êíîïêè
int 0x40
cmp ah, 1 ; åñëè íàæàòà êíîïêà ñ íîìåðîì 1,
jz bexit ; âûõîäèì
jmp still
bexit:
mov eax,-1 ; èíà÷å êîíåö ïðîãðàììû
int 0x40
;end_button
mouse:
; ; íàæàòà ëè ëêì
call draw_edit
call mouse_local ; ïîëó÷àåì êîîðäèíàòû ìûøè îòíîñèòåëüíî îêíà
call button_calc ; îòñëåæèâàåì íàâåäåíèå êóðñîðà
call process_slot ; ïîëó÷àåì ïîçèöèþ â îêîííîì ñòåêå
call button_draw ; îòðèñîâûâàåì êíîïêè
jmp still ; óõîäèì íà îæèäàíèå ñîáûòèÿ
;============================[ CODE ]===========================;
ret
;end_draw_result
;#___________________________________________________________________________________________________
;****************************************************************************************************|
; ÃËÀÂÍÛÉ ÌÎÄÓËÜ ÎÒÐÈÑÎÂÊÈ ÎÊÍÀ È ÝËÅÌÅÍÒÎÂ ÏÐÈËÎÆÅÍÈß |
;----------------------------------------------------------------------------------------------------/
draw_window:
mov eax,12 ; ôóíêöèÿ 12: îçíà÷àåò, ÷òî áóäåò ðèñîâàòüñÿ îêíî
mov ebx,1 ; 1,íà÷àëî ðèñîâàíèÿ
int 0x40 ; Ïðåðûâàíèå
mov eax,48 ; Ôóíêöèÿ 48 - ñòèëè îòîáðàæåíèÿ îêîí.
mov ebx,4 ; Ïîäôóíêöèÿ 4 - âîçâðàùàåò eax = âûñîòà ñêèíà.
int 0x40 ; Ïðåðûâàíèå
mov ecx,eax ; Çàïîìèíàåì âûñîòó ñêèíà
xor eax,eax ; Î÷èùàåì eax (mov eax,0) (Ôóíêöèÿ 0)
mov ebx,200 shl 16+240 ; [êîîðäèíàòà ïî îñè x]*65536 + [ðàçìåð ïî îñè x]
add ecx,200 shl 16+280 ; Âûñîòà ñêèíà + [êîîðäèíàòà ïî y]*65536 + [ðàçìåð ïî y]
mov edx,[sc.win_body] ; Âèäèìî ñòèëü îêíà ïî äåôîëòó
or edx,0x34000000 ; Èëè îêíî ñî ñêèíîì ôèêñèðîâàííûõ ðàçìåðîâ
mov edi,title ; Çàãîëîâîê îêíà
int 0x40 ; Ïðåðûâàíèå
call process_slot ; ïîëó÷àåì ïîçèöèþ â îêîííîì ñòåêå
call button_draw
call draw_edit
call list_draw
mov eax,12 ; ôóíêöèÿ 12: îçíà÷àåò, ÷òî áóäåò ðèñîâàòüñÿ îêíî
mov ebx,2 ; 1,íà÷àëî ðèñîâàíèÿ
int 0x40 ; Ïðåðûâàíèå
ret
;===================================[ DATA ]==================================;
include 'inc/mouse.inc' ; ìûøü
include 'inc/process.inc' ; èíôî î ïðîöåññå
include 'inc/dtp.inc' ; ñòðóêòóðà íîâîé òàáëèöû
include 'inc/button.inc' ; ñàìîïèñíûå êíîïêè
include 'inc/edit.inc' ; ýìóëÿöèÿ íåàêòèâíîãî åäèòà
include 'inc/list.inc' ; îòðèñîâêà ñïèñêà
;; window -------------------------------------------------
sc new_colors ; íîâàÿ òàáëèöà öâåòîâ
title db 'Color Table',0 ; çàãîëîâîê
mouse_x dd 0 ; õðàíèò ãëîáàëüíóþ õ êîîðäèíàòó ìûøè
mouse_y dd 0 ; õðàíèò ãëîáàëüíóþ ó êîîðäèíàòó ìûøè
mouse_l dd 0 ; ëåâàÿ êíîïêà 1 - íàæàòà 0 - íåò
win_slot dd 0 ; 0- îêíî íå íà âåðõó, 1- íà âåðõó
buffer rb 80 ; ïîä 9 ôóíêöèþ
;; button -------------------------------------------------
bnext new_button
bback new_button
arrowa db '<',0
arrowb db '>',0
;; edit ---------------------------------------------------
edit_cnt dd 1 ; counter
edit_win db 'WINDOW',0 ; 1
edit_btn db 'BUTTON',0 ; 2
edit_gui db 'ELEMENT',0 ; 3
edit_cld db 'SUPPORT',0 ; 4
;; list win -----------------------------------------------
text_frame db 'Frame (Activate):',0
text_inframe db 'Frame (Inactivate):',0
text_fcframe db 'Frame (Focus):',0
text_face db 'Face (Activate):',0
text_inface db 'Face (Inactivate):',0
text_fcface db 'Face (Focus):',0
text_border db 'Border (Activate):',0
text_inborder db 'Border (Inactivate):',0
text_wtext db 'Text:',0
text_graytext db 'Graytext:',0
text_title db 'Title:',0
text_body db 'Body:',0
text_reserved db 'Reserved:',0
text_text db 'Text (Activate):',0
text_intext db 'Text (Inactivate):',0
text_fctext db 'Text (Focus):',0
text_3dlight db '3D Light:',0
text_3ddark db '3D Dark:',0
text_3dface db '3D Face:',0
text_shadow db 'Shadow:',0
text_select db 'Select:',0
text_p_face db 'Panel Body:',0
text_p_frame db 'Panel Frame:',0
text_p_text db 'Panel Text:',0
text_m_face db 'Menu Body:',0
text_m_frame db 'Menu Frame:',0
text_m_text db 'Menu Text:',0
text_h_face db 'Hint Body:',0
text_h_frame db 'Hint Frame:',0
text_h_text db 'Hint Text:',0
text_hex db '#',0
;----------------------------------------------------------
I_END: