Code: Select all
org 0
BITS 32
STACK_SIZE equ 256
MENUET01 db 'MENUET01'
version dd 1
program.start dd start_
program.end dd end_
program.memory dd end_ + STACK_SIZE
program.stack dd end_ + STACK_SIZE
program.params dd 0
program.path dd 0
start_:
jmp main
REDRAW_EVENT equ 1
KEY_EVENT equ 2
BUTTON_EVENT equ 3
MOUSE_EVENT equ 6
box_lib dd 0
scrollbar1:
.size_x dw 15
.start_x dw 20
.size_y dw 300
.start_y dw 20
.btn_high dd 15
.type dd 1
.max_area dd 30
.cur_area dd 7
.position dd 0
.bckg_col dd 0xEEEEEE
.frnt_col dd 0xBBDDFF
.line_col dd 0
.redraw dd 0
.delta dw 0
.delta2 dw 0
.r_size_x dw 0
.r_start_x dw 0
.r_size_y dw 0
.r_start_y dw 0
.m_pos dd 0
.m_pos_2 dd 0
.m_keys dd 0
.run_size dd 0
.position2 dd 0
.work_size dd 0
.all_redraw dd 1
.ar_offset dd 10
scrollbar_v_draw dd 0
scrollbar_v_mouse dd 0
sz_box_lib db "/sys/lib/box_lib.obj",0
sz_scrollbar_v_draw db "scrollbar_v_draw",0
sz_scrollbar_v_mouse db "scrollbar_v_mouse",0
main:
; set.event
mov eax, 40
mov ebx, 39
int 64
push sz_box_lib
call load.library
mov [box_lib], eax
push dword[box_lib]
push sz_scrollbar_v_draw
call getprocaddress
mov [scrollbar_v_draw], eax
push dword[box_lib]
push sz_scrollbar_v_mouse
call getprocaddress
mov [scrollbar_v_mouse], eax
call on_redraw
.loop:
; wait.event
mov eax, 10
int 64
cmp eax, REDRAW_EVENT
jne .check_key
call on_redraw
jmp .loop
.check_key:
cmp eax, KEY_EVENT
jne .check_button
; get.key.code
mov eax, 2
int 64
jmp .loop
.check_button:
cmp eax, BUTTON_EVENT
jne .check_mouse
; program.terminate
or eax, -1
int 64
.check_mouse:
cmp eax, MOUSE_EVENT
jne .loop
push scrollbar1
call [scrollbar_v_mouse]
call draw_scrollbar_position
jmp .loop
draw_scrollbar_position:
; draw.number
mov eax, 47
mov ebx, 196608 ; decimal, count = 3
mov ecx,[scrollbar1.position]
mov edx, 3276850 ; 50, 50
mov esi, 40000000h
mov edi, 00FFFFFFh
int 64
ret
on_redraw:
; redraw.start
mov eax, 12
mov ebx, 1
int 64
; draw.window
xor eax, eax
mov ebx, 400
mov ecx, 400
mov edx, 240000DDh
int 64
mov [scrollbar1.all_redraw], dword 1
push scrollbar1
call [scrollbar_v_draw]
call draw_scrollbar_position
; redraw.finish
mov eax, 12
mov ebx, 2
int 64
ret
load.library:
mov eax, 68
mov ebx, 19
mov ecx, [esp + 4]
int 64
ret 4
;
getprocaddress:
mov edx, [esp + 8] ; hlib
xor eax, eax
test edx, edx ; If hlib = 0 then goto .end
jz .end
.next:
cmp [edx], dword 0 ; If end of export table then goto .end
jz .end
xor eax, eax
mov esi, [edx]
mov edi, [esp + 4] ; name
.next_:
lodsb
scasb
jne .fail
or al, al
jnz .next_
jmp .ok
.fail:
add edx, 8
jmp .next
.ok: ; return address
mov eax, [edx + 4]
.end:
ret 8
;
end_: