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 box_lib.asm
@fasm.exe -m 16384 editbox_ex.asm editbox_ex.kex @fasm.exe -m 16384 editbox_ex.asm editbox_ex.kex
@fasm.exe -m 16384 ctrldemo.asm ctrldemo.kex
REM ..\FASM\kpack.exe editbox_ex 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 ; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met: ; modification, are permitted provided that the following conditions are met:
; * Redistributions of source code must retain the above copyright ; * Redistributions of source code must retain the above copyright
; notice, this list of conditions and the following disclaimer. ; notice, this list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright ; * Redistributions in binary form must reproduce the above copyright
; notice, this list of conditions and the following disclaimer in the ; notice, this list of conditions and the following disclaimer in the
; documentation and/or other materials provided with the distribution. ; documentation and/or other materials provided with the distribution.
; * Neither the name of the <organization> nor the ; * Neither the name of the <organization> nor the
; names of its contributors may be used to endorse or promote products ; names of its contributors may be used to endorse or promote products
; derived from this software without specific prior written permission. ; derived from this software without specific prior written permission.
; ;
; THIS SOFTWARE IS PROVIDED BY Mario79 ''AS IS'' AND ANY ; THIS SOFTWARE IS PROVIDED BY Mario79 ''AS IS'' AND ANY
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ; 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 mov edx,sb_line_col
sub ebx,4 shl 16 sub ebx,4 shl 16
mov bx,7 mov bx,7
sub ecx,2 shl 16 sub ecx,2 shl 16
mov cx,1 mov cx,1
mov eax,13 mov eax,13
int 0x40 int 0x40
@ -123,7 +123,7 @@ macro draw_runner_center_vertical
add ecx,edx add ecx,edx
mov edx,sb_line_col mov edx,sb_line_col
sub ecx,8 shl 16 sub ecx,8 shl 16
sub ebx,5 shl 16 sub ebx,5 shl 16
mov bx,10 mov bx,10
add ecx,4 shl 16 add ecx,4 shl 16
mov cx,1 mov cx,1
@ -255,32 +255,33 @@ macro draw_runner_center_horizontal
macro use_scroll_bar macro use_scroll_bar
{ {
scroll_bar: scroll_bar:
sb_size_x equ [edi] sb_size_x equ [edi]
sb_start_x equ [edi+2] sb_start_x equ [edi+2]
sb_size_y equ [edi+4] sb_size_y equ [edi+4]
sb_start_y equ [edi+6] sb_start_y equ [edi+6]
sb_btn_high equ [edi+8] sb_btn_high equ [edi+8]
sb_type equ [edi+12] sb_type equ [edi+12]
sb_max_area equ [edi+16] sb_max_area equ [edi+16]
sb_cur_area equ [edi+20] sb_cur_area equ [edi+20]
sb_position equ [edi+24] sb_position equ [edi+24]
sb_bckg_col equ [edi+28] sb_bckg_col equ [edi+28]
sb_frnt_col equ [edi+32] sb_frnt_col equ [edi+32]
sb_line_col equ [edi+36] sb_line_col equ [edi+36]
sb_redraw equ [edi+40] sb_redraw equ [edi+40]
sb_delta equ [edi+44] sb_delta equ [edi+44]
sb_delta2 equ [edi+46] sb_delta2 equ [edi+46]
sb_r_size_x equ [edi+48] sb_r_size_x equ [edi+48]
sb_r_start_x equ [edi+50] sb_r_start_x equ [edi+50]
sb_r_size_y equ [edi+52] sb_r_size_y equ [edi+52]
sb_r_start_y equ [edi+54] sb_r_start_y equ [edi+54]
sb_m_pos equ [edi+56] sb_m_pos equ [edi+56]
sb_m_pos_2 equ [edi+60] sb_m_pos_2 equ [edi+60]
sb_m_keys equ [edi+64] sb_m_keys equ [edi+64]
sb_run_size equ [edi+68] sb_run_size equ [edi+68]
sb_position2 equ [edi+72] sb_position2 equ [edi+72]
sb_work_size equ [edi+76] sb_work_size equ [edi+76]
sb_all_redraw equ [edi+80] sb_all_redraw equ [edi+80]
sb_ar_offset equ [edi+84]
} }
;***************************************************************************** ;*****************************************************************************
;***************************************************************************** ;*****************************************************************************
@ -293,7 +294,8 @@ scroll_bar_vertical:
.draw: .draw:
pusha pusha
mov edi,dword [esp+36] 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 call .draw_1
mov sb_all_redraw,dword 0 mov sb_all_redraw,dword 0
scroll_bar_exit scroll_bar_exit
@ -310,7 +312,7 @@ scroll_bar_exit
mov eax,sb_work_size ;sb_max_area mov eax,sb_work_size ;sb_max_area
mov ebx,sb_max_area mov ebx,sb_max_area
cmp ebx,sb_cur_area cmp ebx,sb_cur_area
ja @f ja @f
jmp .no_size jmp .no_size
@ -326,12 +328,12 @@ scroll_bar_exit
mov sb_run_size,eax mov sb_run_size,eax
;********************************* ;*********************************
cmp sb_delta,word 1 cmp sb_delta,word 1
je .@@_3 je .@@_3
mov eax,sb_work_size mov eax,sb_work_size
sub eax,sb_run_size sub eax,sb_run_size
mov ebx,sb_max_area mov ebx,sb_max_area
cmp ebx,sb_cur_area cmp ebx,sb_cur_area
ja @f ja @f
xor eax,eax xor eax,eax
jmp .@@_1 jmp .@@_1
@@: @@:
@ -419,7 +421,7 @@ draw_up_arrow_vertical
test cx,0x8000 test cx,0x8000
jnz @f jnz @f
mov edx,sb_bckg_col mov edx,sb_bckg_col
int 0x40 ; top interval int 0x40 ; top interval
@@: @@:
;********************************* ;*********************************
shr ecx,16 shr ecx,16
@ -428,7 +430,7 @@ draw_up_arrow_vertical
shl ecx,16 shl ecx,16
inc ecx inc ecx
mov edx,sb_line_col mov edx,sb_line_col
int 0x40 ; runner - top extreme line int 0x40 ; runner - top extreme line
add ecx,1 shl 16 add ecx,1 shl 16
mov cx,0 mov cx,0
@ -510,16 +512,16 @@ draw_down_arrow_vertical
;***************************************************************************** ;*****************************************************************************
.mouse: .mouse:
pusha pusha
mov edi,dword [esp+36] mov edi,dword [esp+36]
mcall 37,1 mcall 37,1
mov sb_m_pos,eax mov sb_m_pos,eax
cmp sb_m_pos_2,dword 0 cmp sb_m_pos_2,dword 0
jne @f jne @f
mov sb_m_pos_2,eax mov sb_m_pos_2,eax
@@: @@:
mcall 37,2 mcall 37,2
mov sb_m_keys,eax mov sb_m_keys,eax
cmp sb_m_keys,eax cmp sb_m_keys,eax
je @f je @f
@ -537,7 +539,7 @@ draw_down_arrow_vertical
jne @f ;.continue_2 jne @f ;.continue_2
mov eax,sb_m_pos mov eax,sb_m_pos
mov sb_m_pos_2,eax mov sb_m_pos_2,eax
jmp .correct_1 ;.exit_sb jmp .correct_1 ;.exit_sb
@@: @@:
mov sb_delta,word 1 mov sb_delta,word 1
@ -556,56 +558,56 @@ draw_down_arrow_vertical
mov cx,sb_start_y mov cx,sb_start_y
cmp ax,cx cmp ax,cx
jb .exit_sb jb .exit_sb
cmp sb_delta2,word 0 cmp sb_delta2,word 0
je @f je @f
push ecx push ecx
add cx,sb_btn_high add cx,sb_btn_high
cmp ax,cx cmp ax,cx
pop ecx pop ecx
jb .exit_sb jb .exit_sb
@@: @@:
add cx,sb_size_y add cx,sb_size_y
cmp ax,cx cmp ax,cx
ja .exit_sb ja .exit_sb
cmp sb_delta2,word 0 cmp sb_delta2,word 0
je @f je @f
sub cx,sb_btn_high sub cx,sb_btn_high
cmp ax,cx cmp ax,cx
ja .exit_sb ja .exit_sb
@@: @@:
cmp sb_delta2,word 1 cmp sb_delta2,word 1
je @f je @f
cmp sb_m_keys,dword 0 cmp sb_m_keys,dword 0
je .exit_sb je .exit_sb
mov cx,sb_start_x mov cx,sb_start_x
cmp bx,cx cmp bx,cx
jb .exit_sb jb .exit_sb
add cx,sb_size_x add cx,sb_size_x
cmp bx,cx cmp bx,cx
ja .exit_sb ja .exit_sb
mov cx,sb_r_start_y mov cx,sb_r_start_y
cmp ax,cx cmp ax,cx
jb .no_runner jb .no_runner
add cx,sb_r_size_y add cx,sb_r_size_y
cmp ax,cx cmp ax,cx
ja .no_runner ja .no_runner
mov sb_delta2,word 1 mov sb_delta2,word 1
@@: @@:
push eax push eax
mov ax,sb_m_pos mov ax,sb_m_pos
cmp ax,sb_m_pos_2 cmp ax,sb_m_pos_2
je .correct ;.exit_sb je .correct ;.exit_sb
shl eax,16 shl eax,16
shr eax,16 shr eax,16
@ -663,22 +665,26 @@ draw_down_arrow_vertical
mov cx,sb_start_y mov cx,sb_start_y
add cx,sb_btn_high ;15 add cx,sb_btn_high ;15
cmp sb_delta,word 1 cmp sb_delta,word 1
je .scroll_sb je .scroll_sb
cmp ax,cx cmp ax,cx
ja .scroll_sb ja .scroll_sb
cmp sb_m_keys,dword 0 cmp sb_m_keys,dword 0
je .exit_sb je .exit_sb
cmp sb_position,dword 0 mov eax,sb_ar_offset
; je .exit_sb cmp sb_position,eax ;dword 0
je @f ; je .exit_sb
jbe @f
dec dword sb_position ; dec dword sb_position
sub sb_position,eax
jmp .all_sb 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 jmp .all_sb
;***************************************************************************** ;*****************************************************************************
.scroll_sb: .scroll_sb:
@ -686,10 +692,10 @@ draw_down_arrow_vertical
sub cx,sb_btn_high sub cx,sb_btn_high
sub cx,sb_btn_high sub cx,sb_btn_high
cmp sb_delta,word 1 cmp sb_delta,word 1
je @f je @f
cmp ax,cx cmp ax,cx
ja .down_sb ja .down_sb
@@: @@:
mov ebx,sb_btn_high ;16 ;15 mov ebx,sb_btn_high ;16 ;15
@ -702,7 +708,7 @@ draw_down_arrow_vertical
mov ebx,sb_run_size mov ebx,sb_run_size
;***************************************************************************** ;*****************************************************************************
cmp sb_delta,word 1 cmp sb_delta,word 1
je .continue je .continue
@@: @@:
mov edx,eax mov edx,eax
@ -739,7 +745,7 @@ draw_down_arrow_vertical
mov eax,sb_max_area mov eax,sb_max_area
cmp eax,sb_cur_area cmp eax,sb_cur_area
ja @f ja @f
xor eax,eax xor eax,eax
inc eax inc eax
@ -753,7 +759,7 @@ draw_down_arrow_vertical
div ecx div ecx
shl edx,1 shl edx,1
cmp edx,ecx cmp edx,ecx
jb @f jb @f
inc eax inc eax
@ -762,10 +768,10 @@ draw_down_arrow_vertical
shr eax,10 shr eax,10
cmp sb_position,eax cmp sb_position,eax
je .exit_sb je .exit_sb
cmp eax,0 cmp eax,0
ja @f ja @f
xor eax,eax xor eax,eax
@ -784,14 +790,20 @@ draw_down_arrow_vertical
je .exit_sb je .exit_sb
mov eax,sb_max_area mov eax,sb_max_area
mov ebx,sb_ar_offset
sub eax,sb_cur_area sub eax,sb_cur_area
push eax
sub eax,ebx
cmp sb_position,eax cmp sb_position,eax
pop eax
; jae .exit_sb ; jae .exit_sb
jae @f jae @f
inc dword sb_position ; inc dword sb_position
add sb_position,ebx
jmp .all_sb jmp .all_sb
@@: @@:
mov sb_position,eax
xor eax,eax xor eax,eax
mov ax,sb_size_y mov ax,sb_size_y
sub eax,sb_btn_high sub eax,sb_btn_high
@ -799,7 +811,7 @@ draw_down_arrow_vertical
sub eax,sb_run_size sub eax,sb_run_size
mov sb_position2,eax mov sb_position2,eax
jmp .all_sb jmp .all_sb
.exit_sb: .exit_sb:
scroll_bar_exit scroll_bar_exit
} }
@ -814,7 +826,8 @@ scroll_bar_horizontal:
.draw: .draw:
pusha pusha
mov edi,dword [esp+36] 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 call .draw_1
mov sb_all_redraw,dword 0 mov sb_all_redraw,dword 0
scroll_bar_exit scroll_bar_exit
@ -831,7 +844,7 @@ scroll_bar_exit
mov eax,sb_work_size ;sb_max_area mov eax,sb_work_size ;sb_max_area
mov ebx,sb_max_area mov ebx,sb_max_area
cmp ebx,sb_cur_area cmp ebx,sb_cur_area
ja @f ja @f
jmp .no_size jmp .no_size
@ -847,12 +860,12 @@ scroll_bar_exit
mov sb_run_size,eax mov sb_run_size,eax
;********************************* ;*********************************
cmp sb_delta,word 1 cmp sb_delta,word 1
je .@@_3 je .@@_3
mov eax,sb_work_size mov eax,sb_work_size
sub eax,sb_run_size sub eax,sb_run_size
mov ebx,sb_max_area mov ebx,sb_max_area
cmp ebx,sb_cur_area cmp ebx,sb_cur_area
ja @f ja @f
xor eax,eax xor eax,eax
jmp .@@_1 jmp .@@_1
@@: @@:
@ -940,7 +953,7 @@ draw_up_arrow_horizontal
test bx,0x8000 test bx,0x8000
jnz @f jnz @f
mov edx,sb_bckg_col mov edx,sb_bckg_col
int 0x40 ; left interval int 0x40 ; left interval
@@: @@:
;********************************* ;*********************************
shr ebx,16 shr ebx,16
@ -949,7 +962,7 @@ draw_up_arrow_horizontal
shl ebx,16 shl ebx,16
inc ebx inc ebx
mov edx,sb_line_col mov edx,sb_line_col
int 0x40 ; runner - left extreme line int 0x40 ; runner - left extreme line
add ebx,1 shl 16 add ebx,1 shl 16
mov bx,0 mov bx,0
@ -996,7 +1009,7 @@ draw_runner_center_horizontal
mov eax,13 mov eax,13
cmp sb_all_redraw,dword 0 cmp sb_all_redraw,dword 0
je @f je @f
int 0x40 ; bottom button - top line int 0x40 ; bottom button - top line
@@: @@:
push ebx push ebx
add ebx,1 shl 16 add ebx,1 shl 16
@ -1029,16 +1042,16 @@ draw_down_arrow_horizontal
;***************************************************************************** ;*****************************************************************************
.mouse: .mouse:
pusha pusha
mov edi,dword [esp+36] mov edi,dword [esp+36]
mcall 37,1 mcall 37,1
mov sb_m_pos,eax mov sb_m_pos,eax
cmp sb_m_pos_2,dword 0 cmp sb_m_pos_2,dword 0
jne @f jne @f
mov sb_m_pos_2,eax mov sb_m_pos_2,eax
@@: @@:
mcall 37,2 mcall 37,2
mov sb_m_keys,eax mov sb_m_keys,eax
cmp sb_m_keys,eax cmp sb_m_keys,eax
je @f je @f
@ -1056,7 +1069,7 @@ draw_down_arrow_horizontal
jne @f ;.continue_2 jne @f ;.continue_2
mov eax,sb_m_pos mov eax,sb_m_pos
mov sb_m_pos_2,eax mov sb_m_pos_2,eax
jmp .correct_1 ;.exit_sb jmp .correct_1 ;.exit_sb
@@: @@:
mov sb_delta,word 1 mov sb_delta,word 1
@ -1075,49 +1088,49 @@ draw_down_arrow_horizontal
mov cx,sb_start_x ;y mov cx,sb_start_x ;y
cmp ax,cx cmp ax,cx
jb .exit_sb jb .exit_sb
cmp sb_delta2,word 0 cmp sb_delta2,word 0
je @f je @f
push ecx push ecx
add cx,sb_btn_high add cx,sb_btn_high
cmp ax,cx cmp ax,cx
pop ecx pop ecx
jb .exit_sb jb .exit_sb
@@: @@:
add cx,sb_size_x ;y add cx,sb_size_x ;y
cmp ax,cx cmp ax,cx
ja .exit_sb ja .exit_sb
cmp sb_delta2,word 0 cmp sb_delta2,word 0
je @f je @f
sub cx,sb_btn_high sub cx,sb_btn_high
cmp ax,cx cmp ax,cx
ja .exit_sb ja .exit_sb
@@: @@:
cmp sb_delta2,word 1 cmp sb_delta2,word 1
je @f je @f
cmp sb_m_keys,dword 0 cmp sb_m_keys,dword 0
je .exit_sb je .exit_sb
mov cx,sb_start_y ;x mov cx,sb_start_y ;x
cmp bx,cx cmp bx,cx
jb .exit_sb jb .exit_sb
add cx,sb_size_y ;x add cx,sb_size_y ;x
cmp bx,cx cmp bx,cx
ja .exit_sb ja .exit_sb
mov cx,sb_r_start_x mov cx,sb_r_start_x
cmp ax,cx cmp ax,cx
jb .no_runner jb .no_runner
add cx,sb_r_size_x add cx,sb_r_size_x
cmp ax,cx cmp ax,cx
ja .no_runner ja .no_runner
mov sb_delta2,word 1 mov sb_delta2,word 1
@@: @@:
@ -1127,7 +1140,7 @@ draw_down_arrow_horizontal
shr eax,16 shr eax,16
shr ebx,16 shr ebx,16
cmp eax,ebx cmp eax,ebx
je .correct ;.exit_sb je .correct ;.exit_sb
; shl eax,16 ; shl eax,16
; shr eax,16 ; shr eax,16
@ -1141,7 +1154,7 @@ draw_down_arrow_horizontal
mov ebx,eax mov ebx,eax
add sb_position2,ebx add sb_position2,ebx
xor eax,eax 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_btn_high sub eax,sb_btn_high
sub eax,sb_run_size sub eax,sb_run_size
@ -1185,22 +1198,26 @@ draw_down_arrow_horizontal
mov cx,sb_start_x ;y mov cx,sb_start_x ;y
add cx,sb_btn_high ;15 add cx,sb_btn_high ;15
cmp sb_delta,word 1 cmp sb_delta,word 1
je .scroll_sb je .scroll_sb
cmp ax,cx cmp ax,cx
ja .scroll_sb ja .scroll_sb
cmp sb_m_keys,dword 0 cmp sb_m_keys,dword 0
je .exit_sb je .exit_sb
cmp sb_position,dword 0 mov eax,sb_ar_offset
; je .exit_sb cmp sb_position,eax ;dword 0
je @f ; je .exit_sb
jbe @f
dec dword sb_position ; dec dword sb_position
sub sb_position,eax
jmp .all_sb 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 jmp .all_sb
;***************************************************************************** ;*****************************************************************************
.scroll_sb: .scroll_sb:
@ -1208,10 +1225,10 @@ draw_down_arrow_horizontal
sub cx,sb_btn_high sub cx,sb_btn_high
sub cx,sb_btn_high sub cx,sb_btn_high
cmp sb_delta,word 1 cmp sb_delta,word 1
je @f je @f
cmp ax,cx cmp ax,cx
ja .down_sb ja .down_sb
@@: @@:
mov ebx,sb_btn_high ;16 ;15 mov ebx,sb_btn_high ;16 ;15
@ -1224,7 +1241,7 @@ draw_down_arrow_horizontal
mov ebx,sb_run_size mov ebx,sb_run_size
;***************************************************************************** ;*****************************************************************************
cmp sb_delta,word 1 cmp sb_delta,word 1
je .continue je .continue
@@: @@:
mov edx,eax mov edx,eax
@ -1261,7 +1278,7 @@ draw_down_arrow_horizontal
mov eax,sb_max_area mov eax,sb_max_area
cmp eax,sb_cur_area cmp eax,sb_cur_area
ja @f ja @f
xor eax,eax xor eax,eax
inc eax inc eax
@ -1275,7 +1292,7 @@ draw_down_arrow_horizontal
div ecx div ecx
shl edx,1 shl edx,1
cmp edx,ecx cmp edx,ecx
jb @f jb @f
inc eax inc eax
@ -1284,10 +1301,10 @@ draw_down_arrow_horizontal
shr eax,10 shr eax,10
cmp sb_position,eax cmp sb_position,eax
je .exit_sb je .exit_sb
cmp eax,0 cmp eax,0
ja @f ja @f
xor eax,eax xor eax,eax
@ -1306,14 +1323,20 @@ draw_down_arrow_horizontal
je .exit_sb je .exit_sb
mov eax,sb_max_area mov eax,sb_max_area
mov ebx,sb_ar_offset
sub eax,sb_cur_area sub eax,sb_cur_area
push eax
sub eax,ebx
cmp sb_position,eax cmp sb_position,eax
pop eax
; jae .exit_sb ; jae .exit_sb
jae @f jae @f
inc dword sb_position ; inc dword sb_position
add sb_position,ebx
jmp .all_sb jmp .all_sb
@@: @@:
mov sb_position,eax
xor eax,eax xor eax,eax
mov ax,sb_size_x mov ax,sb_size_x
sub eax,sb_btn_high 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
;---------------------------------------------------------------------