1) Example for Box_lib: ScrollBar, MenuBar, DinamicButton

2) Small change of ScrollBar

git-svn-id: svn://kolibrios.org@1041 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2009-02-23 12:26:32 +00:00
parent 0c97a9c69c
commit 29efd28b74
7 changed files with 976 additions and 120 deletions

Binary file not shown.

View File

@ -0,0 +1,431 @@
;
; Example for Box_lib: scrollbar, menubar, dinamic_button
; Copyright (c) 2009, Mario79
; 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.
;
; THIS SOFTWARE IS PROVIDED BY Mario79 ''AS IS'' AND ANY
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;*****************************************************************************
; import_boxlib procedure written by <Lrz>
;---------------------------------------------------------------------
use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd IM_END
dd I_END
dd stacktop
dd 0x0
dd path
include 'MACROS.INC'
;---------------------------------------------------------------------
;--- Start of program ----------------------------------------------
;---------------------------------------------------------------------
START:
mcall 68, 11
mcall 66, 1, 1
mcall 40, 0x27
;---------------------------------------------------------------------
; Procinfo area for function 9 in MenuBar
mcall 68,12,1024
mov [menu_data_1.procinfo],eax
mov [menu_data_2.procinfo],eax
;---------------------------------------------------------------------
; loading Box_Lib library
mov ebx,boxlib_name
mov esi,path
mov edi,file_name
call copy_path
mcall 68,19,file_name ; load of alternative
test eax,eax
jnz @f
mcall 68,19,system_dir ; load of sys directory
test eax,eax
jz button.exit
@@:
call import_boxlib
;---------------------------------------------------------------------
; Load and convert BMP file for DinamicButton
; This procedures use cnv_bmp.obj and this module used only for
; demonstration of use DinamicButton
;
mov ebx,plugin_BMP_name
mov esi,path
mov edi,file_name
call copy_path
mcall 68,19,file_name
test eax,eax
jz button.exit
mov eax,[eax+4]
mov [plugin],eax
mov ebx,icons_file_name
mov esi,path
mov edi,file_name
call copy_path
mcall 70, fileinfo
mov [fileinfo+0],dword 0
mov ecx,[file_info+32]
mov [fileinfo+12],ecx
mov [img_size],ecx
mcall 68, 12
mov [fileinfo+16],eax
mov [image_file],eax
mcall 70, fileinfo
xor eax,eax
mov [return_code],eax
mov eax,image_file
call [plugin]
mov ecx,[image_file]
mcall 68, 13,
cmp [return_code],dword 0
jne button.exit
mov ebx,[raw_pointer]
mov eax,[ebx+4]
; set of button size
mov [dinamic_button_data_1.size_x],ax
mov [dinamic_button_data_1.size_y],ax
mov [dinamic_button_data_2.size_x],ax
mov [dinamic_button_data_2.size_y],ax
mov eax,[ebx+12]
; set of RAW resolution to pixel
mov [dinamic_button_data_1.resolution_raw],eax
mov [dinamic_button_data_2.resolution_raw],eax
mov eax,[ebx+20]
add eax,ebx
; set RAW palette, use else resolution 8bit or less
mov [dinamic_button_data_1.palette_raw],eax
mov [dinamic_button_data_2.palette_raw],eax
mov eax,[ebx+28]
add eax,ebx
; set RAW area for passive button
mov [dinamic_button_data_1.passive_raw],eax
mov [dinamic_button_data_2.passive_raw],eax
mov ecx,[ebx+4]
imul ecx,[ebx+4]
imul ecx,[ebx+12]
shr ecx,3
add eax,ecx
; set RAW area for active button
mov [dinamic_button_data_1.active_raw],eax
mov [dinamic_button_data_2.active_raw],eax
add eax,ecx
; RAW area for click button
mov [dinamic_button_data_1.click_raw],eax
mov [dinamic_button_data_2.click_raw],eax
;---------------------------------------------------------------------
red:
call draw_window
still:
mcall 10
cmp eax,1
je red
cmp eax,2
je key
cmp eax,3
je button
cmp eax,6
je mouse
jmp still
;---------------------------------------------------------------------
key:
mcall 2
jmp still
;---------------------------------------------------------------------
button:
mcall 17
cmp ah, 1
jne still
.exit:
mcall -1
;---------------------------------------------------------------------
mouse:
;-----------------------------------------------
cmp [scroll_bar_data_horizontal.delta2],0
jne .horizontal
.vertical:
mov eax,[scroll_bar_data_vertical.max_area]
cmp eax,[scroll_bar_data_vertical.cur_area]
jbe .horizontal
; mouse event for Vertical ScrollBar
push dword scroll_bar_data_vertical
call [scrollbar_ver_mouse]
mov eax,scroll_bar_data_vertical.redraw
xor ebx,ebx
cmp [eax],ebx
je @f
mov [eax],ebx
jmp .draw_cube
@@:
cmp [scroll_bar_data_vertical.delta2],0
jne still
.horizontal:
mov eax,[scroll_bar_data_horizontal.max_area]
cmp eax,[scroll_bar_data_horizontal.cur_area]
jbe .other
; mouse event for Horizontal ScrollBar
push dword scroll_bar_data_horizontal
call [scrollbar_hor_mouse]
mov eax,scroll_bar_data_horizontal.redraw
xor ebx,ebx
cmp [eax],ebx
je .other
mov [eax],ebx
.draw_cube:
call draw_cube
jmp still
.other:
cmp [scroll_bar_data_vertical.delta2],0
jne still
cmp [scroll_bar_data_horizontal.delta2],0
jne still
;-----------------------------------------------
.menu_bar_1:
call .set_mouse_flag
@@:
; mouse event for Menu 1
push dword menu_data_1
call [menu_bar_mouse]
cmp [menu_data_1.click],dword 1
jne .menu_bar_2
cmp [menu_data_1.cursor_out],dword 0
jne analyse_out_menu_1
jmp .menu_bar_1
;--------------------------------------------
.menu_bar_2:
; mouse event for Menu 2
push dword menu_data_2
call [menu_bar_mouse]
cmp [menu_data_2.click],dword 1
jne .mouse_dinamic_button
cmp [menu_data_2.cursor_out],dword 0
jne analyse_out_menu_2
jmp .menu_bar_1
;--------------------------------------------
.mouse_dinamic_button:
; mouse event for Dinamic Button 1
push dword dinamic_button_data_1
call [dinamic_button_mouse]
mov eax,dinamic_button_data_1.click
cmp [eax],dword 1
jne @f
mov [eax],dword 0
jmp about
@@:
; mouse event for Dinamic Button 2
push dword dinamic_button_data_2
call [dinamic_button_mouse]
mov eax,dinamic_button_data_2.click
cmp [eax],dword 1
jne still ;@f
mov [eax],dword 0
jmp button.exit
;---------------------------------------------------------------------
.set_mouse_flag:
xor eax,eax
inc eax
mov [menu_data_1.get_mouse_flag],eax
mov [menu_data_2.get_mouse_flag],eax
ret
;---------------------------------------------------------------------
analyse_out_menu_1:
; analyse result of Menu 1
cmp [menu_data_1.cursor_out],dword 3
je button.exit
jmp still
analyse_out_menu_2:
; analyse result of Menu 2
cmp [menu_data_2.cursor_out],dword 2
je about
jmp still
;---------------------------------------------------------------------
about:
mcall 51,1,thread3,thread
jmp still
;---------------------------------------------------------------------
draw_window:
mcall 12, 1
mcall 0, <0,400>, <0,400>, 0x03AABBCC, 0x805080D0, 0x005080D0
mcall 71, 1, header_1
;---------------------------------------------
; draw for Menu 1
push dword menu_data_1
call [menu_bar_draw]
; draw for Menu 2
push dword menu_data_2
call [menu_bar_draw]
;---------------------------------------------
; draw for Dinamic Button 1
push dword dinamic_button_data_1
call [dinamic_button_draw]
; draw for Dinamic Button 2
push dword dinamic_button_data_2
call [dinamic_button_draw]
;---------------------------------------------
; set all_redraw flag for draw all ScrollBar
; In some cases it is necessity to draw only the area
; of moving of a "runner", for acceleration of output -
; in this case the flag needs to be reset to 0 (zero).
xor eax,eax
inc eax
mov [scroll_bar_data_vertical.all_redraw],eax
mov [scroll_bar_data_horizontal.all_redraw],eax
; draw for Vertical ScrollBar
push dword scroll_bar_data_vertical
call [scrollbar_ver_draw]
; draw for Horizontal ScrollBar
push dword scroll_bar_data_horizontal
call [scrollbar_hor_draw]
; reset all_redraw flag
xor eax,eax
mov [scroll_bar_data_vertical.all_redraw],eax
mov [scroll_bar_data_horizontal.all_redraw],eax
;---------------------------------------------
call draw_cube
mcall 12, 2
ret
;---------------------------------------------------------------------
draw_cube:
mcall 13,<30,301>,<50,301>,0xafafaf
mov ecx,[scroll_bar_data_vertical.position]
add ecx,50
shl ecx,16
mov cx,30
mov ebx,[scroll_bar_data_horizontal.position]
add ebx,30
shl ebx,16
mov bx,30
mcall 13, , , 0x0
ret
;---------------------------------------------------------------------
copy_path:
xor eax,eax
@@:
cld
lodsb
stosb
test eax,eax
jnz @b
mov esi,edi
@@:
std
lodsb
cmp al,'/'
jnz @b
mov edi,esi
add edi,2
mov esi,ebx
@@:
cld
lodsb
stosb
test eax,eax
jnz @b
ret
;---------------------------------------------------------------------
; Import procedure written by <Lrz>
; Copyright (c) 2008, 2009, <Lrz>
; All rights reserved.
; importing Box_lib entry
import_boxlib:
; initialize import
mov edx, eax
mov esi,myimport
.import_loop:
lodsd
test eax, eax
jz .import_done
push edx
.import_find:
mov ebx, [edx]
test ebx, ebx
jz .exit ;import_not_found
push eax
@@:
mov cl, [eax]
cmp cl, [ebx]
jnz .import_find_next
test cl, cl
jz .import_found
inc eax
inc ebx
jmp @b
.import_find_next:
pop eax
add edx, 8
jmp .import_find
.import_found:
pop eax
mov eax, [edx+4]
mov [esi-4], eax
pop edx
jmp .import_loop
.import_done:
ret
.exit:
add esp,4
jmp button.exit
;---------------------------------------------------------------------
include 'data.inc'
include 'w_about.inc'
IM_END:
rb 1024
thread:
rb 1024
stacktop:
path:
rb 4096
file_name:
rb 4096
file_info:
rb 40
I_END:

View File

@ -0,0 +1,311 @@
;---------------------------------------------------------------------
;--- ÄÀÍÍÛÅ ÏÐÎÃÐÀÌÌÛ ----------------------------------------------
;---------------------------------------------------------------------
header_1 db 'Box_lib Control Demo by Mario79',0
ok_btn db 'Ok',0
labelt3 db 'About program',0
;---------------------------------------------------------------------
icons_file_name: db 'reload_16x16_8b.bmp',0
plugin_BMP_name db 'cnv_bmp.obj',0
boxlib_name db 'box_lib.obj',0
system_dir db '/sys/lib/box_lib.obj',0
;---------------------------------------------------------------------
fileinfo:
dd 5
dd 0
dd 0
dd 0
dd file_info
string:
db 0
dd file_name
plugin dd 0
;---------------------------------------------------------------------
; not change this section!!!
; start section
;---------------------------------------------------------------------
image_file dd 0
raw_pointer dd 0
return_code dd 0
img_size dd 0
deflate_unpack dd 0
;---------------------------------------------------------------------
; end section
;---------------------------------------------------------------------
;---------------------------------------------------------------------
align 4
myimport:
edit_box_draw dd aEdit_box_draw
edit_box_key dd aEdit_box_key
edit_box_mouse dd aEdit_box_mouse
version_ed dd aVersion_ed
check_box_draw dd aCheck_box_draw
check_box_mouse dd aCheck_box_mouse
version_ch dd aVersion_ch
option_box_draw dd aOption_box_draw
option_box_mouse dd aOption_box_mouse
version_op dd aVersion_op
scrollbar_ver_draw dd aScrollbar_ver_draw
scrollbar_ver_mouse dd aScrollbar_ver_mouse
scrollbar_hor_draw dd aScrollbar_hor_draw
scrollbar_hor_mouse dd aScrollbar_hor_mouse
version_scrollbar dd aVersion_scrollbar
dinamic_button_draw dd aDbutton_draw
dinamic_button_mouse dd aDbutton_mouse
version_dbutton dd aVersion_dbutton
menu_bar_draw dd aMenu_bar_draw
menu_bar_mouse dd aMenu_bar_mouse
version_menu_bar dd aVersion_menu_bar
dd 0
dd 0
aEdit_box_draw db 'edit_box',0
aEdit_box_key db 'edit_box_key',0
aEdit_box_mouse db 'edit_box_mouse',0
aVersion_ed db 'version_ed',0
aCheck_box_draw db 'check_box_draw',0
aCheck_box_mouse db 'check_box_mouse',0
aVersion_ch db 'version_ch',0
aOption_box_draw db 'option_box_draw',0
aOption_box_mouse db 'option_box_mouse',0
aVersion_op db 'version_op',0
aScrollbar_ver_draw db 'scrollbar_v_draw',0
aScrollbar_ver_mouse db 'scrollbar_v_mouse',0
aScrollbar_hor_draw db 'scrollbar_h_draw',0
aScrollbar_hor_mouse db 'scrollbar_h_mouse',0
aVersion_scrollbar db 'version_scrollbar',0
aDbutton_draw db 'dbutton_draw',0
aDbutton_mouse db 'dbutton_mouse',0
aVersion_dbutton db 'version_dbutton',0
aMenu_bar_draw db 'menu_bar_draw',0
aMenu_bar_mouse db 'menu_bar_mouse',0
aVersion_menu_bar db 'version_menu_bar',0
;---------------------------------------------------------------------
;---------------------------------------------------------------------
align 4
scroll_bar_data_vertical:
.x:
.size_x dw 15 ;+0
.start_x dw 370 ;+2
.y:
.size_y dw 300 ;+4
.start_y dw 50 ;+6
.btn_high dd 15 ;+8
.type dd 1 ;+12
.max_area dd 300 ;+16
.cur_area dd 30 ;+20
.position dd 140 ;+24
.bckg_col dd 0xeeeeee ;+28
.frnt_col dd 0xbbddff ;+32
.line_col dd 0 ;+36
.redraw dd 0 ;+40
.delta dw 0 ;+44
.delta2 dw 0 ;+46
.run_x:
.r_size_x dw 0 ;+48
.r_start_x dw 0 ;+50
.run_y:
.r_size_y dw 0 ;+52
.r_start_y dw 0 ;+54
.m_pos dd 0 ;+56
.m_pos_2 dd 0 ;+60
.m_keys dd 0 ;+64
.run_size dd 0 ;+68
.position2 dd 0 ;+72
.work_size dd 0 ;+76
.all_redraw dd 0 ;+80
.ar_offset dd 10 ;+84
;---------------------------------------------------------------------
align 4
scroll_bar_data_horizontal:
.x:
.size_x dw 300 ;0 ;+0
.start_x dw 30 ;0 ;+2
.y:
.size_y dw 15 ;0 ;+4
.start_y dw 370 ;0 ;+6
.btn_high dd 15 ;+8
.type dd 1 ;+12
.max_area dd 300 ;+16
.cur_area dd 30 ;+20
.position dd 140 ;+24
.bckg_col dd 0xeeeeee ;+28
.frnt_col dd 0xbbddff ;+32
.line_col dd 0 ;+36
.redraw dd 0 ;+40
.delta dw 0 ;+44
.delta2 dw 0 ;+46
.run_x:
.r_size_x dw 0 ;+48
.r_start_x dw 0 ;+50
.run_y:
.r_size_y dw 0 ;+52
.r_start_y dw 0 ;+54
.m_pos dd 0 ;+56
.m_pos_2 dd 0 ;+60
.m_keys dd 0 ;+64
.run_size dd 0 ;+68
.position2 dd 0 ;+72
.work_size dd 0 ;+76
.all_redraw dd 0 ;+80
.ar_offset dd 10 ;+84
;---------------------------------------------------------------------
align 4
menu_data_1:
.type: dd 0 ;+0
.x:
.size_x dw 40 ;+4
.start_x dw 20 ;+6
.y:
.size_y dw 15 ;+8
.start_y dw 25 ;+10
.text_pointer: dd menu_text_area ;0 ;+12
.pos_pointer: dd menu_text_area.1 ;0 ;+16
.text_end dd menu_text_area.end ;0 ;+20
.mouse_pos dd 0 ;+24
.mouse_keys dd 0 ;+28
.x1:
.size_x1 dw 40 ;+32
.start_x1 dw 20 ;+34
.y1:
.size_y1 dw 100 ;+36
.start_y1 dw 40 ;+38
.bckg_col dd 0xeeeeee ;+40
.frnt_col dd 0xff ;+44
.menu_col dd 0xffffff ;+48
.select dd 0 ;+52
.out_select dd 0 ;+56
.buf_adress dd 0 ;+60
.procinfo dd 0 ;+64
.click dd 0 ;+68
.cursor dd 0 ;+72
.cursor_old dd 0 ;+76
.interval dd 16 ;+80
.cursor_max dd 0 ;+84
.extended_key dd 0 ;+88
.menu_sel_col dd 0x00cc00 ;+92
.bckg_text_col dd 0 ; +96
.frnt_text_col dd 0xffffff ;+100
.mouse_keys_old dd 0 ;+104
.font_height dd 8 ;+108
.cursor_out dd 0 ;+112
.get_mouse_flag dd 0 ;+116
;-------------------------
menu_text_area:
db 'File',0
.1:
db 'Test1',0
db 'Test2',0
db 'Exit',0
.end:
db 0
;---------------------------------------------------------------------
align 4
menu_data_2:
.type: dd 0 ;+0
.x:
.size_x dw 40 ;+4
.start_x dw 60 ;+6
.y:
.size_y dw 15 ;+8
.start_y dw 25 ;+10
.text_pointer: dd menu_text_area_2 ;0 ;+12
.pos_pointer: dd menu_text_area_2.1 ;0 ;+16
.text_end dd menu_text_area_2.end ;0 ;+20
.mouse_pos dd 0 ;+24
.mouse_keys dd 0 ;+28
.x1:
.size_x1 dw 50 ;+32
.start_x1 dw 60 ;+34
.y1:
.size_y1 dw 100 ;+36
.start_y1 dw 40 ;+38
.bckg_col dd 0xeeeeee ;+40
.frnt_col dd 0xff ;+44
.menu_col dd 0xffffff ;+48
.select dd 0 ;+52
.out_select dd 0 ;+56
.buf_adress dd 0 ;+60
.procinfo dd 0 ;+64
.click dd 0 ;+68
.cursor dd 0 ;+72
.cursor_old dd 0 ;+76
.interval dd 16 ;+80
.cursor_max dd 0 ;+84
.extended_key dd 0 ;+88
.menu_sel_col dd 0x00cc00 ;+92
.bckg_text_col dd 0 ; +96
.frnt_text_col dd 0xffffff ;+100
.mouse_keys_old dd 0 ;+104
.font_height dd 8 ;+108
.cursor_out dd 0 ;+112
.get_mouse_flag dd 0 ;+116
;------------------------
menu_text_area_2:
db 'Help',0
.1:
db 'Test1',0
db 'About',0
.end:
db 0
;---------------------------------------------------------------------
align 4
dinamic_button_data_1:
.type dd 0 ;+0
.x:
.size_x dw 20 ;+4
.start_x dw 150 ;+6
.y:
.size_y dw 20 ;+8
.start_y dw 25 ;+10
.mouse_pos dd 0 ;+12
.mouse_keys dd 0 ;+16
.mouse_keys_old dd 0 ;+20
.active_raw dd 0 ;+24
.passive_raw dd 0 ;+28
.click_raw dd 0 ;+32
.resolution_raw dd 0 ;+36
.palette_raw dd 0 ;+40
.offset_raw dd 0 ;+44
.select dd 0 ;+48
.click dd 0 ;+52
;---------------------------------------------------------------------
align 4
dinamic_button_data_2:
.type dd 0 ;+0
.x:
.size_x dw 20 ;+4
.start_x dw 180 ;+6
.y:
.size_y dw 20 ;+8
.start_y dw 25 ;+10
.mouse_pos dd 0 ;+12
.mouse_keys dd 0 ;+16
.mouse_keys_old dd 0 ;+20
.active_raw dd 0 ;+24
.passive_raw dd 0 ;+28
.click_raw dd 0 ;+32
.resolution_raw dd 0 ;+36
.palette_raw dd 0 ;+40
.offset_raw dd 0 ;+44
.select dd 0 ;+48
.click dd 0 ;+52
;---------------------------------------------------------------------

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,4 +1,6 @@
@fasm.exe -m 16384 box_lib.asm
@fasm.exe -m 16384 editbox_ex.asm editbox_ex.kex
@fasm.exe -m 16384 ctrldemo.asm ctrldemo.kex
REM ..\FASM\kpack.exe editbox_ex
@klbrinwin.exe editbox_ex.kex
rem @klbrinwin.exe editbox_ex.kex
pause

View File

@ -5,14 +5,14 @@
;
; 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.
; * 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.
;
; THIS SOFTWARE IS PROVIDED BY Mario79 ''AS IS'' AND ANY
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@ -87,7 +87,7 @@ macro draw_down_arrow_vertical
mov edx,sb_line_col
sub ebx,4 shl 16
mov bx,7
sub ecx,2 shl 16
sub ecx,2 shl 16
mov cx,1
mov eax,13
int 0x40
@ -123,7 +123,7 @@ macro draw_runner_center_vertical
add ecx,edx
mov edx,sb_line_col
sub ecx,8 shl 16
sub ebx,5 shl 16
sub ebx,5 shl 16
mov bx,10
add ecx,4 shl 16
mov cx,1
@ -255,32 +255,33 @@ macro draw_runner_center_horizontal
macro use_scroll_bar
{
scroll_bar:
sb_size_x equ [edi]
sb_start_x equ [edi+2]
sb_size_y equ [edi+4]
sb_start_y equ [edi+6]
sb_btn_high equ [edi+8]
sb_type equ [edi+12]
sb_max_area equ [edi+16]
sb_cur_area equ [edi+20]
sb_position equ [edi+24]
sb_bckg_col equ [edi+28]
sb_frnt_col equ [edi+32]
sb_line_col equ [edi+36]
sb_redraw equ [edi+40]
sb_delta equ [edi+44]
sb_delta2 equ [edi+46]
sb_r_size_x equ [edi+48]
sb_r_start_x equ [edi+50]
sb_r_size_y equ [edi+52]
sb_r_start_y equ [edi+54]
sb_m_pos equ [edi+56]
sb_m_pos_2 equ [edi+60]
sb_m_keys equ [edi+64]
sb_run_size equ [edi+68]
sb_position2 equ [edi+72]
sb_work_size equ [edi+76]
sb_all_redraw equ [edi+80]
sb_size_x equ [edi]
sb_start_x equ [edi+2]
sb_size_y equ [edi+4]
sb_start_y equ [edi+6]
sb_btn_high equ [edi+8]
sb_type equ [edi+12]
sb_max_area equ [edi+16]
sb_cur_area equ [edi+20]
sb_position equ [edi+24]
sb_bckg_col equ [edi+28]
sb_frnt_col equ [edi+32]
sb_line_col equ [edi+36]
sb_redraw equ [edi+40]
sb_delta equ [edi+44]
sb_delta2 equ [edi+46]
sb_r_size_x equ [edi+48]
sb_r_start_x equ [edi+50]
sb_r_size_y equ [edi+52]
sb_r_start_y equ [edi+54]
sb_m_pos equ [edi+56]
sb_m_pos_2 equ [edi+60]
sb_m_keys equ [edi+64]
sb_run_size equ [edi+68]
sb_position2 equ [edi+72]
sb_work_size equ [edi+76]
sb_all_redraw equ [edi+80]
sb_ar_offset equ [edi+84]
}
;*****************************************************************************
;*****************************************************************************
@ -293,7 +294,8 @@ scroll_bar_vertical:
.draw:
pusha
mov edi,dword [esp+36]
mov sb_all_redraw,dword 1
; mov sb_all_redraw,dword 1
mov sb_delta,word 0
call .draw_1
mov sb_all_redraw,dword 0
scroll_bar_exit
@ -310,7 +312,7 @@ scroll_bar_exit
mov eax,sb_work_size ;sb_max_area
mov ebx,sb_max_area
cmp ebx,sb_cur_area
ja @f
ja @f
jmp .no_size
@ -326,12 +328,12 @@ scroll_bar_exit
mov sb_run_size,eax
;*********************************
cmp sb_delta,word 1
je .@@_3
je .@@_3
mov eax,sb_work_size
sub eax,sb_run_size
mov ebx,sb_max_area
cmp ebx,sb_cur_area
ja @f
ja @f
xor eax,eax
jmp .@@_1
@@:
@ -419,7 +421,7 @@ draw_up_arrow_vertical
test cx,0x8000
jnz @f
mov edx,sb_bckg_col
int 0x40 ; top interval
int 0x40 ; top interval
@@:
;*********************************
shr ecx,16
@ -428,7 +430,7 @@ draw_up_arrow_vertical
shl ecx,16
inc ecx
mov edx,sb_line_col
int 0x40 ; runner - top extreme line
int 0x40 ; runner - top extreme line
add ecx,1 shl 16
mov cx,0
@ -510,16 +512,16 @@ draw_down_arrow_vertical
;*****************************************************************************
.mouse:
pusha
mov edi,dword [esp+36]
mov edi,dword [esp+36]
mcall 37,1
mov sb_m_pos,eax
cmp sb_m_pos_2,dword 0
jne @f
mov sb_m_pos_2,eax
mov sb_m_pos_2,eax
@@:
mcall 37,2
mov sb_m_keys,eax
mov sb_m_keys,eax
cmp sb_m_keys,eax
je @f
@ -537,7 +539,7 @@ draw_down_arrow_vertical
jne @f ;.continue_2
mov eax,sb_m_pos
mov sb_m_pos_2,eax
jmp .correct_1 ;.exit_sb
jmp .correct_1 ;.exit_sb
@@:
mov sb_delta,word 1
@ -556,56 +558,56 @@ draw_down_arrow_vertical
mov cx,sb_start_y
cmp ax,cx
jb .exit_sb
jb .exit_sb
cmp sb_delta2,word 0
je @f
je @f
push ecx
add cx,sb_btn_high
cmp ax,cx
pop ecx
jb .exit_sb
jb .exit_sb
@@:
add cx,sb_size_y
cmp ax,cx
ja .exit_sb
ja .exit_sb
cmp sb_delta2,word 0
je @f
je @f
sub cx,sb_btn_high
cmp ax,cx
ja .exit_sb
ja .exit_sb
@@:
cmp sb_delta2,word 1
je @f
je @f
cmp sb_m_keys,dword 0
je .exit_sb
je .exit_sb
mov cx,sb_start_x
cmp bx,cx
jb .exit_sb
jb .exit_sb
add cx,sb_size_x
cmp bx,cx
ja .exit_sb
ja .exit_sb
mov cx,sb_r_start_y
cmp ax,cx
jb .no_runner
jb .no_runner
add cx,sb_r_size_y
cmp ax,cx
ja .no_runner
ja .no_runner
mov sb_delta2,word 1
@@:
push eax
mov ax,sb_m_pos
cmp ax,sb_m_pos_2
je .correct ;.exit_sb
je .correct ;.exit_sb
shl eax,16
shr eax,16
@ -663,22 +665,26 @@ draw_down_arrow_vertical
mov cx,sb_start_y
add cx,sb_btn_high ;15
cmp sb_delta,word 1
je .scroll_sb
je .scroll_sb
cmp ax,cx
ja .scroll_sb
ja .scroll_sb
cmp sb_m_keys,dword 0
je .exit_sb
cmp sb_position,dword 0
; je .exit_sb
je @f
mov eax,sb_ar_offset
cmp sb_position,eax ;dword 0
; je .exit_sb
jbe @f
dec dword sb_position
; dec dword sb_position
sub sb_position,eax
jmp .all_sb
@@:
mov sb_position2,dword 0
xor eax,eax
mov sb_position,eax ;dword 0
mov sb_position2,eax ;dword 0
jmp .all_sb
;*****************************************************************************
.scroll_sb:
@ -686,10 +692,10 @@ draw_down_arrow_vertical
sub cx,sb_btn_high
sub cx,sb_btn_high
cmp sb_delta,word 1
je @f
je @f
cmp ax,cx
ja .down_sb
ja .down_sb
@@:
mov ebx,sb_btn_high ;16 ;15
@ -702,7 +708,7 @@ draw_down_arrow_vertical
mov ebx,sb_run_size
;*****************************************************************************
cmp sb_delta,word 1
je .continue
je .continue
@@:
mov edx,eax
@ -739,7 +745,7 @@ draw_down_arrow_vertical
mov eax,sb_max_area
cmp eax,sb_cur_area
ja @f
ja @f
xor eax,eax
inc eax
@ -753,7 +759,7 @@ draw_down_arrow_vertical
div ecx
shl edx,1
cmp edx,ecx
jb @f
jb @f
inc eax
@ -762,10 +768,10 @@ draw_down_arrow_vertical
shr eax,10
cmp sb_position,eax
je .exit_sb
je .exit_sb
cmp eax,0
ja @f
ja @f
xor eax,eax
@ -784,14 +790,20 @@ draw_down_arrow_vertical
je .exit_sb
mov eax,sb_max_area
mov ebx,sb_ar_offset
sub eax,sb_cur_area
push eax
sub eax,ebx
cmp sb_position,eax
pop eax
; jae .exit_sb
jae @f
inc dword sb_position
; inc dword sb_position
add sb_position,ebx
jmp .all_sb
@@:
mov sb_position,eax
xor eax,eax
mov ax,sb_size_y
sub eax,sb_btn_high
@ -799,7 +811,7 @@ draw_down_arrow_vertical
sub eax,sb_run_size
mov sb_position2,eax
jmp .all_sb
.exit_sb:
.exit_sb:
scroll_bar_exit
}
@ -814,7 +826,8 @@ scroll_bar_horizontal:
.draw:
pusha
mov edi,dword [esp+36]
mov sb_all_redraw,dword 1
; mov sb_all_redraw,dword 1
mov sb_delta,word 0
call .draw_1
mov sb_all_redraw,dword 0
scroll_bar_exit
@ -831,7 +844,7 @@ scroll_bar_exit
mov eax,sb_work_size ;sb_max_area
mov ebx,sb_max_area
cmp ebx,sb_cur_area
ja @f
ja @f
jmp .no_size
@ -847,12 +860,12 @@ scroll_bar_exit
mov sb_run_size,eax
;*********************************
cmp sb_delta,word 1
je .@@_3
je .@@_3
mov eax,sb_work_size
sub eax,sb_run_size
mov ebx,sb_max_area
cmp ebx,sb_cur_area
ja @f
ja @f
xor eax,eax
jmp .@@_1
@@:
@ -940,7 +953,7 @@ draw_up_arrow_horizontal
test bx,0x8000
jnz @f
mov edx,sb_bckg_col
int 0x40 ; left interval
int 0x40 ; left interval
@@:
;*********************************
shr ebx,16
@ -949,7 +962,7 @@ draw_up_arrow_horizontal
shl ebx,16
inc ebx
mov edx,sb_line_col
int 0x40 ; runner - left extreme line
int 0x40 ; runner - left extreme line
add ebx,1 shl 16
mov bx,0
@ -996,7 +1009,7 @@ draw_runner_center_horizontal
mov eax,13
cmp sb_all_redraw,dword 0
je @f
int 0x40 ; bottom button - top line
int 0x40 ; bottom button - top line
@@:
push ebx
add ebx,1 shl 16
@ -1029,16 +1042,16 @@ draw_down_arrow_horizontal
;*****************************************************************************
.mouse:
pusha
mov edi,dword [esp+36]
mov edi,dword [esp+36]
mcall 37,1
mov sb_m_pos,eax
cmp sb_m_pos_2,dword 0
jne @f
mov sb_m_pos_2,eax
mov sb_m_pos_2,eax
@@:
mcall 37,2
mov sb_m_keys,eax
mov sb_m_keys,eax
cmp sb_m_keys,eax
je @f
@ -1056,7 +1069,7 @@ draw_down_arrow_horizontal
jne @f ;.continue_2
mov eax,sb_m_pos
mov sb_m_pos_2,eax
jmp .correct_1 ;.exit_sb
jmp .correct_1 ;.exit_sb
@@:
mov sb_delta,word 1
@ -1075,49 +1088,49 @@ draw_down_arrow_horizontal
mov cx,sb_start_x ;y
cmp ax,cx
jb .exit_sb
jb .exit_sb
cmp sb_delta2,word 0
je @f
je @f
push ecx
add cx,sb_btn_high
cmp ax,cx
pop ecx
jb .exit_sb
jb .exit_sb
@@:
add cx,sb_size_x ;y
add cx,sb_size_x ;y
cmp ax,cx
ja .exit_sb
ja .exit_sb
cmp sb_delta2,word 0
je @f
je @f
sub cx,sb_btn_high
cmp ax,cx
ja .exit_sb
ja .exit_sb
@@:
cmp sb_delta2,word 1
je @f
je @f
cmp sb_m_keys,dword 0
je .exit_sb
je .exit_sb
mov cx,sb_start_y ;x
cmp bx,cx
jb .exit_sb
jb .exit_sb
add cx,sb_size_y ;x
add cx,sb_size_y ;x
cmp bx,cx
ja .exit_sb
ja .exit_sb
mov cx,sb_r_start_x
cmp ax,cx
jb .no_runner
jb .no_runner
add cx,sb_r_size_x
cmp ax,cx
ja .no_runner
ja .no_runner
mov sb_delta2,word 1
@@:
@ -1127,7 +1140,7 @@ draw_down_arrow_horizontal
shr eax,16
shr ebx,16
cmp eax,ebx
je .correct ;.exit_sb
je .correct ;.exit_sb
; shl eax,16
; shr eax,16
@ -1141,7 +1154,7 @@ draw_down_arrow_horizontal
mov ebx,eax
add sb_position2,ebx
xor eax,eax
mov ax,sb_size_x ;y
mov ax,sb_size_x ;y
sub eax,sb_btn_high
sub eax,sb_btn_high
sub eax,sb_run_size
@ -1185,22 +1198,26 @@ draw_down_arrow_horizontal
mov cx,sb_start_x ;y
add cx,sb_btn_high ;15
cmp sb_delta,word 1
je .scroll_sb
je .scroll_sb
cmp ax,cx
ja .scroll_sb
ja .scroll_sb
cmp sb_m_keys,dword 0
je .exit_sb
cmp sb_position,dword 0
; je .exit_sb
je @f
mov eax,sb_ar_offset
cmp sb_position,eax ;dword 0
; je .exit_sb
jbe @f
dec dword sb_position
; dec dword sb_position
sub sb_position,eax
jmp .all_sb
@@:
mov sb_position2,dword 0
xor eax,eax
mov sb_position,eax ;dword 0
mov sb_position2,eax ;dword 0
jmp .all_sb
;*****************************************************************************
.scroll_sb:
@ -1208,10 +1225,10 @@ draw_down_arrow_horizontal
sub cx,sb_btn_high
sub cx,sb_btn_high
cmp sb_delta,word 1
je @f
je @f
cmp ax,cx
ja .down_sb
ja .down_sb
@@:
mov ebx,sb_btn_high ;16 ;15
@ -1224,7 +1241,7 @@ draw_down_arrow_horizontal
mov ebx,sb_run_size
;*****************************************************************************
cmp sb_delta,word 1
je .continue
je .continue
@@:
mov edx,eax
@ -1261,7 +1278,7 @@ draw_down_arrow_horizontal
mov eax,sb_max_area
cmp eax,sb_cur_area
ja @f
ja @f
xor eax,eax
inc eax
@ -1275,7 +1292,7 @@ draw_down_arrow_horizontal
div ecx
shl edx,1
cmp edx,ecx
jb @f
jb @f
inc eax
@ -1284,10 +1301,10 @@ draw_down_arrow_horizontal
shr eax,10
cmp sb_position,eax
je .exit_sb
je .exit_sb
cmp eax,0
ja @f
ja @f
xor eax,eax
@ -1306,14 +1323,20 @@ draw_down_arrow_horizontal
je .exit_sb
mov eax,sb_max_area
mov ebx,sb_ar_offset
sub eax,sb_cur_area
push eax
sub eax,ebx
cmp sb_position,eax
pop eax
; jae .exit_sb
jae @f
inc dword sb_position
; inc dword sb_position
add sb_position,ebx
jmp .all_sb
@@:
mov sb_position,eax
xor eax,eax
mov ax,sb_size_x
sub eax,sb_btn_high

View File

@ -0,0 +1,89 @@
;---------------------------------------------------------------------
thread3:
call draw_window3
still3:
mov eax,10 ; wait here for event
mcall
cmp eax,1 ; redraw request ?
je thread3
cmp eax,2 ; key in buffer ?
je key3
cmp eax,3 ; button in buffer ?
je button3
jmp still3
key3:
mcall
cmp ah,27
je close3
jmp still3
button3: ; button
mov eax,17 ; get id
mcall
cmp ah,1 ; button id=1 ?
je close3
cmp ah,2
jne noclose3
close3:
mov eax,-1 ; close this program
mcall
noclose3:
jmp still3
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window3:
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw
mcall
; DRAW WINDOW
xor eax,eax ; function 0 : define and draw window
mov ebx,100*65536+200 ; [x start] *65536 + [x size]
mov ecx,100*65536+100 ; [y start] *65536 + [y size]
mov edx,0x03eeeeee ; color of work area RRGGBB,8->color gl
mcall
mcall 4,<10,40>,0x80000000,header_1
mov ebx,70*65536+40
mov ecx,70*65536+20
mov edx,2
mov esi,0xdddddd
mcall 8
add ebx,15 shl 16
shr ecx,16
mov bx,cx
add ebx,6
mov ecx,0
mov edx, ok_btn
mov esi,2
mcall 4
; WINDOW LABEL
mcall 71,1, labelt3
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
mcall
ret
;---------------------------------------------------------------------