Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1656 → Rev 1657

/programs/develop/libraries/box_lib/branch/box_lib.asm
43,6 → 43,8
;CheckBox
;----------------------------------------------------
align 16
_init_checkbox ;macro for init checkbox
align 16
use_checkbox_draw ;macro reveals the function of the display.
align 16
use_checkbox_mouse ;macro reveals processing function of the mouse.
131,9 → 133,10
;dd sz_edit_box_set_text, edit_box_set_text
;dd szVersion_ed, 0x00000001
 
dd sz_init_checkbox, init_checkbox
dd sz_check_box_draw, check_box_draw
dd sz_check_box_mouse, check_box_mouse
dd szVersion_ch, 0x00000001
dd szVersion_ch, 0x00000002
 
;dd sz_option_box_draw, option_box_draw
;dd sz_option_box_mouse, option_box_mouse
229,6 → 232,7
sz_edit_box_set_text db 'edit_box_set_text',0
szVersion_ed db 'version_ed',0
 
sz_init_checkbox db 'init_checkbox',0
sz_check_box_draw db 'check_box_draw',0
sz_check_box_mouse db 'check_box_mouse',0
szVersion_ch db 'version_ch',0
/programs/develop/libraries/box_lib/branch/box_lib.mac
103,9 → 103,9
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use CheckBox ;
;Last change 11.10.2010 ;
;Last change 12.10.2010 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ch_struc_size=32 ;ðàçìåð ñòðóêòóðû
ch_struc_size=36 ;ðàçìåð ñòðóêòóðû
ch_flag_en=10b ;ôëàã óñòàíîâëåííîãî ÷åê áîêñà.
 
ch_left_s equ [ebp] ;êîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî õ
116,6 → 116,7
ch_text_color equ [ebp+20] ;[edi+4] ;öâåò òåêñòà
ch_text_ptr equ [ebp+24] ;óêàçàòåëü íà íà÷àëî òåêñòîâîé ñòðîêè
ch_flags equ [ebp+28] ;ôëàãè
ch_sz_str equ [ebp+32] ;äëèííà ñòðîêè, âû÷èñëÿåòñÿ ïðè èíèöèàëèçàöèè êîìïîíåíòà
 
struc check_box left_s,top_s,ch_text_margin,color,border_color,text_color,text,flags
{ ;ñòðóêòóðà ïàðàìåòðîâ äëÿ ÷åê áîêñà
127,6 → 128,7
.text_color: dd text_color ;öâåò íàäïèñè
.text: dd text ;àäðåñ â êîäå ïðîãðàììû ãäå ðàñïîëîæåí òåêñò
.flags: dd flags+0 ; ôëàãè
.size_of_str: dd 0x0 ;äëèííà ñòðîêè, âû÷èñëÿåòñÿ ïðè èíèöèàëèçàöèè êîìïîíåíòà
}
 
macro check_boxes_set_sys_color start,end,color_table
/programs/develop/libraries/box_lib/branch/checkbox.asm
52,11 → 52,23
;--- Start of program ----------------------------------------------
;---------------------------------------------------------------------
START:
mcall 40,0x27
 
sys_load_library library_name, cur_dir_path, library_path, system_path, \
err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
test eax,eax
jnz exit
;init checkboxes
push dword check1
call [init_checkbox]
 
push dword check2
call [init_checkbox]
 
push dword check3
call [init_checkbox]
 
window:
call draw_window ;ïåðâîíà÷àëüíî íåîáõîäèìî íàðèñîâàòü îêíî
align 4
75,6 → 87,10
push dword check2
call [check_box_mouse]
 
push dword check3
call [check_box_mouse]
 
 
jmp still ;åñëè íè÷åãî èç ïåðå÷èñëåííîãî òî ñíîâà â öèêë
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
button:
99,6 → 115,10
push dword check2
call [check_box_draw]
 
push dword check3
call [check_box_draw]
 
 
mcall 12,2
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
119,6 → 139,7
 
myimport:
 
init_checkbox dd aInit_checkbox
check_box_draw dd aCheck_box_draw
check_box_mouse dd aCheck_box_mouse
version_ch dd aVersion_ch
125,18 → 146,21
dd 0,0
 
 
aInit_checkbox db 'init_checkbox',0
aCheck_box_draw db 'check_box_draw',0
aCheck_box_mouse db 'check_box_mouse',0
aVersion_ch db 'version_ch',0
;---------------------------------------------------------------------
check1 check_box (10 shr 16 + 12),(45 shr 16 + 12),6,0x80AABBCC,0,0,check_text,ch_flag_en
check2 check_box (10 shr 16 + 12),(60 shr 16 + 12),6,0x80AABBCC,0,0,check_text2
check1 check_box (20 shl 16 + 12),(45 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text,ch_flag_en
check2 check_box (20 shl 16 + 22),(60 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text2
check3 check_box (20 shl 16 + 12),(75 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text3
;---------------------------------------------------------------------
hed db 'CheckBox Exemples <Lrz> date 03.10.2010',0
hed db 'CheckBox Exemples <Lrz> date 12.10.2010',0
hed_end:
;---------------------------------------------------------------------
check_text db 'First checkbox',0
check_text2 db 'Second checkbox',0
check_text3 db 'Number 3 checkbox',0
;---------------------------------------------------------------------
MEM_END:
cur_dir_path rb 1024
/programs/develop/libraries/box_lib/branch/checkbox.mac
3,16 → 3,35
;Ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
;Checkbox
 
;Èíèöèàëèçàöèÿ checkbox
macro _init_checkbox
{
init_checkbox:
;ïîäñ÷èòàåì êîë-âî ñèìâîëîâ â äëèííå âûâîäèìîé ñòðîêè.
pushad
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
mov ebx,dword ch_text_margin ;eax=0
mov esi,dword ch_text_ptr ;óêàçàòåëü íà ñòðî÷êó
lodsb ;â al ïåðâûé ñèìâîë èç ñòðîêè
test al,al
jz .ex_loop
@@:
add ebx,6 ;øèðèíà ñèìâîëà
lodsb
test al,al
jnz @b
.ex_loop:
 
mov dword ch_sz_str,ebx ;çàïèøèì äëèííó ñòðîêè ñ ó÷åòîì îòñòóïà îò êâàäðàòèêà
popad
ret 4
}
 
macro use_checkbox_draw
{
check_box_draw:
pushad ;ñîõðàíèì âñå ðåãèñòðû
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
; mov ebx,ch_left_s
; mov ecx,ch_top_s
; mov edx,dword ch_border_color
; mov eax,13
; mcall ;ðèñóåì ðàìêó
mcall 13,ch_left_s,ch_top_s,ch_border_color ;ðèñóåì ðàìêó ÷åê áîêñà, ôàêòè÷åñêè ðèñóåì ïðÿìîóãîëüíèê è çàêðàøèâàåì ôîí âíóòðè öâåòîì ðàìêè áîêñà
 
mov edx,dword ch_color ;çàãðóæàåì öâåò ôîíà
33,7 → 52,7
; add ebx,dword ch_left_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ
 
; mov eax,word ch_top_s ;çàãðóçèì çíà÷åíèå ïî (y shl 16 + äëèííà) äëÿ ÷åê áîêñà
; shl eax,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
; shr eax,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
; add eax,dword ch_top_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Y
; Îïòèìèçàöèÿ äëÿ ÖÏ
40,17 → 59,17
mov ebx,dword ch_left_s ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà) äëÿ ÷åê áîêñà
mov eax,dword ch_top_s ;çàãðóçèì çíà÷åíèå ïî (y shl 16 + äëèííà) äëÿ ÷åê áîêñà
add ebx,dword ch_text_margin ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
shl eax,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
shr eax,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
shl ebx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
add eax,dword ch_top_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Y
add ebx,dword ch_left_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ
shr eax,16 ;äëÿ y ïîìåñòèì â ìëàäøóþ ÷àñòü
mov bx,ax ;âíåñåì ñìåùåíèå äëÿ y
sub ax,7 ;âíåñåì ñìåùåíèå äëÿ y
mov bx,ax
;ebx õ shl 16 +y êîîðäèíàòû âûâîäà ñòðî÷êè
 
mov ecx,dword ch_text_color ;çàãðóçèì öâåò íàäïèñè + flags
mov edx,dword ch_text_ptr ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
mov eax,4 ;âíåñåì â eax çíà÷åíèå âûâîäà íàäïèñè íà êàíâó
mcall ;Âûâîä
mcall 4 ;Âûâîä
popad ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
ret 4 ;âûéäåì èç ïðîöåäóðû è óäàëèì èç ñòåêà óêàçàòåëü íà ñòðóêòóðó (4 áàéòà)
 
60,33 → 79,12
check_box_draw_ch: ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
mov edx,dword ch_border_color ;çàãðóçèòü öâåò
@@:
; movzx ebx,word ch_left ;çàãðóçèòü êîîðäèíàòó ïî õ
; mov eax,dword ch_size
; mov di,ax
; shr eax,2
; push ax
;
; push ax
; add ebx,eax
; shl ebx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
; pop ax
; lea eax,[eax*2]
; sub bp,ax ;ñîõðàíèì ðåãèñòð bx â ðåãèñòðå óêàçàòåëÿ áàçû
; mov bx,bp
 
; movzx ecx,word ch_top ;çàãðóçèòü êîîðäèíàòó ïî ó
; pop ax
; add cx,ax
; shl ecx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
; mov cx,bp ;çàãðóçèì çíà÷åíèÿ ðåãèñòðà óêàçàòåëÿ áàçû â cx
; mov eax,13 ;â eax - çíà÷åíèÿ ôóíêöèè äëÿ âûâîäà ïîëîñû ò.å. ïî ñóòè ïðÿìîóãîëüíèêà, êîòîðûé îòîáðàæàåò âêëþ÷åííûé êîìïîíåíò ÷åê áîêñ
; mcall ;âûâîä
 
mov ebx,dword ch_left_s
mov ecx,dword ch_top_s
add ebx,1 shl 16 - 4
add ecx,1 shl 16 - 4
mcall 13
;Îòîáðàçèòü âêëþ÷åíûé checkbox
mov ebx,dword ch_left_s ;çàãðóæàåì õ shl 16 + äëèííà ïî Õ
mov ecx,dword ch_top_s ;çàãðóæàåì Y shl 16 + äëèííà ïî Y
add ebx,2 shl 16 - 4 ;ïîñëå ýòèõ èçìåíåíèé (X+2) shl 16 +äëèííà ïî (Õ-2)
add ecx,2 shl 16 - 4 ;ïîñëå ýòèõ èçìåíåíèé (Y+2) shl 16 +äëèííà ïî (Y-2)
mcall 13 ;îòîáðàçèòü êâàäðàò âíóòðè checkbox
ret
}
 
102,10 → 100,8
pushad
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
mcall 37,2 ;ïðîâåðÿåì ñîñòîÿíèå êëàâèø ìûøêè. Áûëî ëè ñîáûòèå íàæàòàÿ êëàâèøà íà ìûøêå.
test eax,eax ;ïðîâåðêà åñëè ó íàñ â eax=0, òî óñòàíîâèì ôëàã è âûéäåì
jnz @f ;ïåðåéòè íà íèæíþþ ìåòêó @@, åñëè â eax íå 0.
; and dword ch_flags,eax ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå.
jmp .check_box_mouse_end ;îáðàáîòêà çàêîí÷èëàñü
test eax,eax ;ïðîâåðêà åñëè ó íàñ â eax=0, âûéäåì
jz .check_box_mouse_end ;îáðàáîòêà çàêîí÷èëàñü
; Äà ñîáûòèå: íàæàòèå êëàâèøè ìûøêè ïðîèçîøëî.
@@:
mcall 37,1 ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà
120,6 → 116,8
add cx,bx ;ñëîæèì äëèííó ïî y è êîîðäèíàòó âåðõíåé òî÷êè ïî y ïîëè÷èì êîîðäèíàòó íèæíåé òî÷êè ïî Y
cmp ax,cx
ja .check_box_mouse_end ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
shr eax,16 ;ñìåñòèì êîîðäèíàòó ïî Õ â íèæíóþ ÷àñòü ðåãèñòðà ò.å. â ax
;ñðàâíåíèå ïî íà÷àëüíîé òî÷êå Õ
mov ecx,dword ch_left_s ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà) äëÿ ÷åê áîêñà
mov ebx,ecx
127,24 → 125,10
cmp ax,bx
jb .check_box_mouse_end ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî X ÷åì êîîðäèíàòà ïî X ó áîêñà
;ñðàâíåíèå êîíå÷íîé òî÷êè ïî X
add bx,cx ;ñëîæèì äëèííó ïî y è êîîðäèíàòó âåðõíåé òî÷êè ïî y ïîëè÷èì êîîðäèíàòó íèæíåé òî÷êè ïî Y
add ebx,dword ch_text_margin ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
mov ecx,dword ch_text_ptr ;óêàæåì àäðåñ ñòðîêè ñ òåðìèíèðóåùèì 0
push eax
 
;ïîäñ÷åò äëèííû ñòðîêè è óâåëè÷åíèå ïðÿìîãîëüíèêà â êîòîðîì ñðàáàòûâàåò ùåë÷îê ìûøêè
lodsb
test al,al
jz .ex_loop
@@:
add bx,6 ;øèðèíà ñèìâîëà
lodsb
test al,al
jnz @b
.ex_loop:
pop eax
add bx,cx ;ñëîæèì äëèííó ïî x è êîîðäèíàòó òî÷êè ïî õ ïîëó÷èì êîîðäèíàòó êîíå÷íîé òî÷êè ïî Õ
add bx,word ch_sz_str ;äîáàâèì äëèííó ñòðîêè òåêñòà ñ îòñòóïîì ïðåäâàðòèåëüíî çàïèñàâ èõ â ìîìåíò èíèöèàëèçàöèè
cmp ax,bx
ja .check_box_mouse_end ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
ja .check_box_mouse_end ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî õ ÷åì êîîðäèíàòà ïî Õ ó áîêñà
;åñëè âñå ïðîâåðêè áûëè óñïåøíî ïðîéäåíû ìû îáÿçàíû ïîìåíÿòü ñîñòîÿíèå áîêñà
btc dword ch_flags,2 ;ïåðåíîñ 2-ãî áèòà â cf è èíâåðñèÿ åãî
jc .enable_box ;åñëè CF=1 òî îòîáðàçèì âêëþ÷åííûé áîêñ è âûéäåì
153,48 → 137,7
 
.enable_box:
call check_box_draw_ch ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ
 
 
 
; bts dword ch_flags,2 ;ïðîâåðêà ôëàãà ò.å. ïåðåíîñ â cf çíà÷åíèå áèòà è óñòàíîâêà áèòà â ñîñòîÿíèå âêëþ÷åíî
; jc check_box_mouse_end ;åñëè CF=1 òî ïåðåéòè â êîíåö ò.å. ýòî âûõîä
; mov esi,dword ch_text_length ;çàãðóçèòü êîë-âî ñèìâîëîâ â òåêñòîâîé ñòðîêå
;Óìíîæåíèå íà 6 Áûñòðîå óìíîæåíèå ìîæíî âîñïîëüçîâàòüñÿ ëþáûì ìç ìåòîäîâ, íî íà ñòàðûõ Ïðîöåññîðàõ (386,486,P1)áûñòðåå áóäåò ñ èíñòðóêöèåé Lea
; lea esi,[eax*3]
; shl esi,1
; imul esi,6 ; èëè ìîæíî è òàê óìíîæèòü íà 6
; add esi,dword ch_text_margin ;äîáàâèòü 3 - ðàññòîÿíèå îò ÷åê áîêñà äî íàäïèñè
 
; mov eax,37 ;ïîëó÷èì êîîðäèíàòû ìûøêè
; mov ebx,1 ;äîáàâèòü 1
; mcall ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà
; movzx ebx,word ch_top ;çàãðóçèòü â bx çíà÷åíèå êîîðäèíàòû ó
; cmp ax,bx ;ñðàâíèòü ñ ñ êîîðäèíàòîé êóðñîðà
; jl check_box_mouse_end ;SF <> OF åñëè ìåíüøå
; add ebx,dword ch_size ;äîáàâèòü ðàçìåð
; cmp ax,bx ;ñðàâíèòü
; jg check_box_mouse_end ;ZF = 0 è SF = OF åñëè áîëüøå
; shr eax,16 ;ðàçäåëèì íà 65536 èëè ïðîñòî ñäâèíåì áèòû íà 16 çíà÷åíèé
; movzx ebx,word ch_left ;ïðîèçâåäåì àíàëîãè÷íîå ñðàâíåíèå
; cmp ax,bx ;ñðàâíèòü ðåãèñòðû
; jl check_box_mouse_end ;åñëè ìåíüøå
; add ebx,dword ch_size ;äîáàâèòü äëèíó ñòîðîíû ïðÿìîóãîëüíèêà
; add ebx,esi ;Ó÷åñòü â çíà÷åíèè ïî õ åùå è äëèíó íàäïèñè ê ÷åêáîêñó
; cmp ax,bx ;ñòðàâíèòü ðåãèñòðû
; jg check_box_mouse_end ;åñëè áîëüøå
 
; bts dword ch_flags,1 ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà 1.
; jc @f ;CF=1 òî ïåðåéòè íà íèæíþþ @@
; call check_box_draw_ch ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ
; mov dword [esp+24],1 ;äàëüíåéøàÿ ïðîâåðêà ÷åê áîêñîâ áåñìûñëåíà, ïî ýòîìó â ñòåê, ãäå ðàñïîëàãàåòñÿ ecx ïîìåñòèòì 0
; jmp check_box_mouse_end ;âûéòè
;@@:
; btr word ch_flags,1 ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå.
; call check_box_clear_ch ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà.
.check_box_mouse_end:
popad ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
ret 4 ;âûéòè
ret 4 ;âûéòè è âîññòàíîâèì ñòåê
}