- Move source code from `trunk` into root directory. - Update build files and ASM include paths. Add SPDX license header where appropriate. - Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden. (Work towards [#75](KolibriOS/kolibrios#75), point 3) Reviewed-on: KolibriOS/kolibrios#433 Reviewed-by: Burer <burer@kolibrios.org> Reviewed-by: Ivan B <1+dunkaist@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>
151 lines
6.6 KiB
FASM
151 lines
6.6 KiB
FASM
;╧юёыхфэр ьюфшЇшърЎш 02.02.2021
|
|
;Їрщы ёючфрэ 13.02.2009 <Lrz> ═р ъюф яЁшьхэхэр GPL2 ышЎхэчш
|
|
;Checkbox
|
|
|
|
;╚эшЎшрышчрЎш checkbox
|
|
align 16
|
|
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 ;чряш°хь фышээє ёЄЁюъш ё єўхЄюь юЄёЄєяр юЄ ътрфЁрЄшър
|
|
or dword ch_text_color,0x80000000 ;фюсрты хь сшЄ фы т√тюфр ASCIIZ-ёЄЁюъш
|
|
;эр ёыєўрщ хёыш яюы№чютрЄхы№ чрс√ы хую ёрьюёЄю Єхы№эю яюёЄртшЄ№ т ёЄЁєъЄєЁх
|
|
popad
|
|
ret 4
|
|
|
|
|
|
align 16
|
|
check_box_draw:
|
|
pushad ;ёюїЁрэшь тёх ЁхушёЄЁ√
|
|
mov ebp,dword [esp+36] ;чруЁєцрхь єърчрЄхы№ эр ёЄЁєъЄєЁє, єърчрЄхы№ ь√ яхЁхфрхь т ёЄхъх
|
|
mcall SF_DRAW_RECT,ch_left_s,ch_top_s,ch_border_color ;Ёшёєхь Ёрьъє ўхъ сюъёр, ЇръЄшўхёъш Ёшёєхь яЁ ьюєуюы№эшъ ш чръЁр°штрхь Їюэ тэєЄЁш ЎтхЄюь Ёрьъш сюъёр
|
|
|
|
mov edx,dword ch_color ;чруЁєцрхь ЎтхЄ Їюэр
|
|
add ebx,1 shl 16 - 2
|
|
add ecx,1 shl 16 - 2
|
|
mcall ;чръЁр°штрхь тэєЄЁхээюёЄш ўхъсюъёр Їюэюь
|
|
|
|
test dword ch_flags,2 ;фюёЄрЄ№ чэрўхэшх сшЄр шч яхЁхьхээющ ш яюьхёЄшЄ№ т Їыру CF
|
|
jz @f ;т хёыш CF=1, Єю т√яюыэшь ёыхфє■∙є■ яЁюЎхфєЁє шэрўх яхЁхщЄш эр эшцэ■■ @@
|
|
call check_box_draw_ch ;эрЁшёютрЄ№ тъы■ўхээ√щ ўхъ сюъё
|
|
@@:
|
|
;----------------------------
|
|
;ЁрёўхЄ ъєфр сєфхЄ яЁюшчтхфхэ т√тюф ЄхъёЄр
|
|
;----------------------------
|
|
; mov ebx,dword ch_left_s ;чруЁєчшЄ№ чэрўхэшх (ї shl 16 + фышээр) фы ўхъ сюъёр
|
|
; add ebx,dword ch_text_margin ;фюсртшь ЁрчьхЁ ёЄюЁюэ√ ш ЁрёёЄю эшх эр ъюЄюЁюь эрўэхЄё т√тюф ЄхъёЄр
|
|
; shl ebx,16 ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536)
|
|
; add ebx,dword ch_left_s ;cъюЁЁхъЄшЁєхь яючшЎш■ ╒. ╥.х. ёхщўрё т тхЁїэхщ ўрёЄш ebx є эрё Єюўър эрўрыр т√тюфр ЄхъёЄр яю ╒
|
|
|
|
; mov eax,word ch_top_s ;чруЁєчшь чэрўхэшх яю (y shl 16 + фышээр) фы ўхъ сюъёр
|
|
; shr eax,16 ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536)
|
|
; add eax,dword ch_top_s ;cъюЁЁхъЄшЁєхь яючшЎш■ ╒. ╥.х. ёхщўрё т тхЁїэхщ ўрёЄш ebx є эрё Єюўър эрўрыр т√тюфр ЄхъёЄр яю Y
|
|
|
|
; ╬яЄшьшчрЎш фы ╓╧
|
|
mov ebx,dword ch_left_s ;чруЁєчшЄ№ чэрўхэшх (ї shl 16 + фышээр) фы ўхъ сюъёр
|
|
mov eax,dword ch_top_s ;чруЁєчшь чэрўхэшх яю (y shl 16 + фышээр) фы ўхъ сюъёр
|
|
mov ecx,eax
|
|
add ebx,dword ch_text_margin ;фюсртшь ЁрчьхЁ ёЄюЁюэ√ ш ЁрёёЄю эшх эр ъюЄюЁюь эрўэхЄё т√тюф ЄхъёЄр
|
|
shr eax,16 ;ёфтшэхь эр 16 ЁрчЁ фют т яЁртю (Ёрчфхышь эр 65536) т ax тхЁїэр Єюўър
|
|
shl ebx,16 ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536)
|
|
|
|
sub ecx,8 ;ъюЁЁхЄшЁютър єўшЄ√трхь т√ёюЄє °ЁшЇЄр
|
|
|
|
test dword ch_flags,ch_flag_bottom ;яЁютхЁшь, эєцэю ыш т√тюфшЄ№ ттхЁїє эрфяшё№
|
|
jnz .bottom
|
|
|
|
test dword ch_flags,ch_flag_middle ;яЁютхЁшь, эєцэю ыш т√тюфшЄ№ т ЎхэЄЁ эрфяшё№
|
|
jz .top ;юёЄрыё Єюы№ъю top
|
|
|
|
shr cx,1 ;Ёрчфхышь эр 2
|
|
.bottom:
|
|
add ax,cx
|
|
.top:
|
|
add ebx,dword ch_left_s ;cъюЁЁхъЄшЁєхь яючшЎш■ ╒. ╥.х. ёхщўрё т тхЁїэхщ ўрёЄш ebx є эрё Єюўър эрўрыр т√тюфр ЄхъёЄр яю ╒
|
|
mov bx,ax
|
|
;ebx ї shl 16 +y ъююЁфшэрЄ√ т√тюфр ёЄЁюўъш
|
|
|
|
mov ecx,dword ch_text_color ;чруЁєчшь ЎтхЄ эрфяшёш + flags
|
|
mov edx,dword ch_text_ptr ;єърцхь рфЁхё юЄ ъєфр эєцэю т√тюфшЄ№ ёЄЁюъє
|
|
mcall SF_DRAW_TEXT
|
|
popad ;тюёёЄрэютшЄ№ чэрўхэш ЁхушёЄЁют шч ёЄхър
|
|
ret 4 ;т√щфхь шч яЁюЎхфєЁ√ ш єфрышь шч ёЄхър єърчрЄхы№ эр ёЄЁєъЄєЁє (4 срщЄр)
|
|
|
|
check_box_clear_ch: ;юўшёЄър ўхъ сюъёр
|
|
mov edx,dword ch_color ;ЎтхЄ тэєЄЁш ўхъ сюъёр
|
|
jmp @f ;схчєёыютэ√щ яЁ√цюъ эр эшцэ■■ ьхЄъє @@
|
|
check_box_draw_ch: ;эрЁшёютрЄ№ тъы■ўхээ√щ ўхъ сюъё
|
|
mov edx,dword ch_border_color ;чруЁєчшЄ№ ЎтхЄ
|
|
@@:
|
|
;╬ЄюсЁрчшЄ№ тъы■ўхэ√щ 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 SF_DRAW_RECT ;юЄюсЁрчшЄ№ ътрфЁрЄ тэєЄЁш checkbox
|
|
ret
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;╬сЁрсюЄўшъ mouse
|
|
;╧Ёш яюярфрэшш ь√°ъш + эрцрЄр ъыртш°р т юсырёЄ№ checkbox ёюёЄю эшх сюъёр фюыцэю ьхэ Єё ръЄштэ√щ - эх ръЄштэ√щ.
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
align 16
|
|
check_box_mouse: ;юсЁрсюЄър ь√°ш
|
|
pushad
|
|
mov ebp,dword [esp+36] ;чруЁєцрхь єърчрЄхы№ эр ёЄЁєъЄєЁє, єърчрЄхы№ ь√ яхЁхфрхь т ёЄхъх
|
|
mcall SF_MOUSE_GET,SSF_BUTTON_EXT ;яЁютхЁ хь ёюёЄю эшх ъыртш° ь√°ъш. ┴√ыю ыш ёюс√Єшх эрцрЄр ъыртш°р эр ь√°ъх.
|
|
and eax, 3 shl 8 ;яЁютхЁ хь ыхтє■ ш яЁртє■ ъэюяъш
|
|
jz .end ;юсЁрсюЄър чръюэўшырё№
|
|
; ─р ёюс√Єшх: эрцрЄшх ъыртш°ш ь√°ъш яЁюшчю°ыю.
|
|
@@:
|
|
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION ;яюыєўшЄ№ ъююЁфшэрЄ√ ъєЁёюЁр юЄэюёшЄхы№эю юъэр
|
|
;эр т√їюфх т eax x shl 16 + y
|
|
;ёЁртэхэшх тхЁїэхщ Єюўъш яю Y
|
|
mov ecx,dword ch_top_s ;y shl 16 +фышээр яю y
|
|
mov ebx,ecx
|
|
shr ebx,16 ;bx = ъююЁфшэрЄр яю y
|
|
cmp ax,bx
|
|
jb .end ;єърчрЄхы№ ь√°ъш ьхэ№°х эрўры№эющ ъююЁфшэрЄ√ яю y ўхь ъююЁфшэрЄр яю Y є сюъёр
|
|
;ёЁртэхэшх эшцэхщ Єюўъш яю Y
|
|
add cx,bx ;ёыюцшь фышээє яю y ш ъююЁфшэрЄє тхЁїэхщ Єюўъш яю y яюышўшь ъююЁфшэрЄє эшцэхщ Єюўъш яю Y
|
|
cmp ax,cx
|
|
ja .end ;єърчрЄхы№ ь√°ъш сюы№°х ъюэхўэющ ъююЁфшэрЄ√ яю y ўхь ъююЁфшэрЄр яю Y є сюъёр
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
shr eax,16 ;ёьхёЄшь ъююЁфшэрЄє яю ╒ т эшцэє■ ўрёЄ№ ЁхушёЄЁр Є.х. т ax
|
|
;ёЁртэхэшх яю эрўры№эющ Єюўъх ╒
|
|
mov ecx,dword ch_left_s ;чруЁєчшЄ№ чэрўхэшх (ї shl 16 + фышээр) фы ўхъ сюъёр
|
|
mov ebx,ecx
|
|
shr ebx,16 ;bx = ъююЁфшэрЄр яю X
|
|
cmp ax,bx
|
|
jb .end ;єърчрЄхы№ ь√°ъш ьхэ№°х эрўры№эющ ъююЁфшэрЄ√ яю X ўхь ъююЁфшэрЄр яю X є сюъёр
|
|
;ёЁртэхэшх ъюэхўэющ Єюўъш яю X
|
|
add bx,cx ;ёыюцшь фышээє яю x ш ъююЁфшэрЄє Єюўъш яю ї яюыєўшь ъююЁфшэрЄє ъюэхўэющ Єюўъш яю ╒
|
|
add bx,word ch_sz_str ;фюсртшь фышээє ёЄЁюъш ЄхъёЄр ё юЄёЄєяюь яЁхфтрЁЄшхы№эю чряшёрт шї т ьюьхэЄ шэшЎшрышчрЎшш
|
|
cmp ax,bx
|
|
ja .end ;єърчрЄхы№ ь√°ъш сюы№°х ъюэхўэющ ъююЁфшэрЄ√ яю ї ўхь ъююЁфшэрЄр яю ╒ є сюъёр
|
|
;хёыш тёх яЁютхЁъш с√ыш єёях°эю яЁющфхэ√ ь√ юс чрэ√ яюьхэ Є№ ёюёЄю эшх сюъёр
|
|
btc dword ch_flags,1 ;яхЁхэюё 2-ую сшЄр т cf ш шэтхЁёш хую
|
|
jnc .enable_box ;хёыш CF=1 Єю юЄюсЁрчшь тъы■ўхээ√щ сюъё ш т√щфхь
|
|
push dword .end ;Їюъєё-яюъєё, тхЁэхьё яюёых т√чютр check_box_clear_ch эр ьхЄъє check_box_mouse.end
|
|
jmp check_box_clear_ch ;т√ъы■ўшЄ№ ўхъ сюъё Є.х. эр ьхёЄх чръЁр°хээюую яЁ ьюєуюы№эшър юЄюсЁрчшЄ№ ЎтхЄ Їюэр.
|
|
|
|
.enable_box:
|
|
call check_box_draw_ch ;юЄюсЁрчшЄ№ тъы■ўхээ√щ ўхъ сюъё
|
|
.end:
|
|
popad ;тюёёЄрэютшЄ№ ЁхушёЄЁ√ шч ёЄхър
|
|
ret 4 ;т√щЄш ш тюёёЄрэютшь ёЄхъ
|