0,0 → 1,383 |
; |
; 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' |
include 'load_lib.mac' |
;--------------------------------------------------------------------- |
;--- 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 |
load_libraries l_libs_start,end_l_libs |
;sys_load_library boxlib_name, path, file_name, system_dir, \ |
;er_message_found_lib, ihead_f_l, myimport, er_message_import, ihead_f_i |
; test eax,eax |
; jnz button.exit |
|
;----------------------------------old |
; 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 |
copy_path plugin_BMP_name,path,file_name |
; |
mcall 68,19,file_name |
test eax,eax |
jz button.exit |
|
mov eax,[eax+4] |
mov [plugin],eax |
|
|
;ïðîâåðêà íà ñêîëüêî óäà÷íî çàãóçèëàñü íàøà ëèáà |
mov ebp,library01 |
cmp dword [ebp+ll_struc_size-4],0 |
jnz button.exit |
; |
; mov ebp,library02 |
; cmp dword [ebp+ll_struc_size-4],0x2 |
; jnz button.exit |
; mov eax,dword [ebp+36] |
; mov eax,[eax+4] |
; mov [plugin],eax |
|
|
|
; mov ebx,icons_file_name |
; mov esi,path |
; mov edi,file_name |
copy_path icons_file_name,path,file_name |
|
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 |
|
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: |
|