kolibrios-fun/programs/ac97wav/trunk/frontend.inc
Andrey Halyavin (halyavin) 065b8d32b2 programs sources added
git-svn-id: svn://kolibrios.org@31 a494cfbc-eb01-0410-851d-a64ba20cac60
2006-01-03 09:43:31 +00:00

271 lines
6.5 KiB
PHP

thread:
call draw_window
call main_loop
mov [status], ST_EXIT
mcall MF_EXIT
;---------------------------------------------------------------------
main_loop:
cmp [status], ST_PLAY
je @f
mcall MF_WAIT_EVENT
jmp .handle_event
@@:
call draw_progress_bar
mcall MF_WAIT_EVENT_TIMEOUT, 80
.handle_event:
cmp eax, EV_REDRAW
je redraw
cmp eax, EV_BUTTON
je button
cmp eax, EV_KEY
je key
jmp main_loop
redraw:
call draw_window
jmp main_loop
key:
mcall MF_GETKEY
cmp [textbox_active], 1
jne main_loop
cmp ah, 13
je .enter
cmp ah, 8
je .backspace
movzx ecx, [textbox_position]
cmp ecx, 47
jae .enter
mov [textbox_string + ecx], ah
inc [textbox_position]
call textbox_draw
jmp main_loop
.enter:
mov [textbox_active], 0
call textbox_draw
jmp main_loop
.backspace:
movzx ecx, [textbox_position]
test ecx, ecx
jz main_loop
mov [textbox_string + ecx], byte 0
dec [textbox_position]
call textbox_draw
jmp main_loop
button:
mcall MF_GETBUTTON
cmp ah, 0x10
je play_button
cmp ah, 0x11
je stop_button
cmp ah, 0x12
je decr_button
cmp ah, 0x13
je incr_button
cmp ah, 0x14
je volm_button
cmp ah, 0x15
je volp_button
cmp ah, 0x20
je activate_textbox
cmp ah, 0x30
je progressbar_click
cmp ah, 1
jne main_loop
; mov [status], ST_STOP
; mcall MF_DELAY, 40
ret
play_button:
xor eax, eax
xchg al, [textbox_active]
cmp al, 0
je @f
call textbox_draw
@@:
mov [status], ST_PLAY
jmp main_loop
stop_button:
mov [status], ST_STOP
jmp main_loop
decr_button:
; mov [status], ST_STOP
; @@:
; mcall 5, 1
; cmp [status], ST_DONE
; jne @b
; movzx esi, [textbox_position]
; add esi, textbox_string
; @@:
; cmp byte [esi], '/'
; je @f
; dec esi
; jmp @b
; @@:
; mov byte [esi+1], 0
; mov [fileinfo.first_block], 0
; mov [fileinfo.dest], WAV_BUFFER1
; mcall 58, fileinfo
; add ebx, WAV_BUFFER1
; mov esi, WAV_BUFFER1+8
; .next_file:
; cmp ebx, esi
; jbe .fin
; cmp word [esi], "WA"
; jne .next_file
; cmp byte [esi+1], "V"
; jne .next_file
; .fin:
;mov eax, [fileinfo.first_block]
;cmp eax, 1000
;jnl @f
;mov [fileinfo.first_block], 0
;jmp main_loop
;@@:
;sub [fileinfo.first_block], 1000
;jmp main_loop
incr_button:
;add [fileinfo.first_block], 1000
jmp main_loop
volm_button:
inc byte [volume]
and byte [volume], 0x1f
jz volp_button
or [volume], 0x10000000
jmp _print_volume
; jmp main_loop
volp_button:
dec byte [volume]
and byte [volume], 0x1f
jz volm_button
or [volume], 0x10000000
; jmp main_loop
_print_volume:
movzx eax, byte [volume]
neg eax
add eax, 31
dps "Volume: "
dpd eax
newline
jmp main_loop
activate_textbox:
cmp [status], ST_DONE
jne main_loop
mov [textbox_active], 1
call textbox_draw
jmp main_loop
progressbar_click:
;print "click on progress bar"
cmp [status], ST_DONE
je main_loop
mcall MF_GETMOUSE, MS_COORDS_WINDOW
shr eax, 16 ; get mouse.x
sub eax, 7
test eax, eax
jz @f
imul eax, [file_size]
mov ebx, 286
cdq
div ebx
@@:
;dps "block: "
;dpd eax
;newline
mov [fileinfo.first_block], eax
call draw_progress_bar
jmp main_loop
ret
;---------------------------------------------------------------------
PBAR_WIDTH = 286
draw_window:
mcall MF_DRAWSTATUS, DS_BEGIN
mcall MF_WINDOW, <100,299>, <100,72>, 0x03404040
; create six buttons
mov edi, 6
mpack ebx, 7, 45
mpack ecx, 24, 13
mov edx, 0x10
mov esi, 0xA0A0A0
@@:
mcall MF_BUTTON
add ebx, 48 shl 16
inc edx
dec edi
jnz @b
mcall MF_TEXT, <8,8>, 0x10FFFFFF, header, header.size
mcall ,<13,28>, 0x404040, buttons_text, buttons_text.size
sub ebx, 0x00010001
mov ecx, 0xFFFFFF
mcall
call draw_progress_bar
call textbox_draw
mcall MF_DRAWSTATUS, DS_END
ret
;---------------------------------------------------------------------
textbox_draw:
mcall MF_BUTTON, <7,285>, <55,10>, 0x60000020
mov edx, 0x808080
cmp [textbox_active], 1
jne @f
mov edx, 0xA0A0A0
@@:
mcall MF_BAR, <7,286>, <55,11>
movzx esi, [textbox_position]
mcall MF_TEXT, <10,56>, 0x404040, textbox_string
ret
;---------------------------------------------------------------------
draw_progress_bar:
pushad
imul eax, [fileinfo.first_block], PBAR_WIDTH
cdq
div [file_size]
push eax
mcall MF_BAR, <7,286>, <41,11>, 0x808080
mcall MF_BUTTON, , , 0x60000030
pop eax
mov bx, ax
mov edx, 0xA0A0A0
mcall MF_BAR
popad
ret
;---------------------------------------------------------------------
sz header, "AC'97 WAV player - all PCM audio"
sz buttons_text, " Play Stop << >> Vol- Vol+"
textbox_active db 0
textbox_position db textbox_string.size-1
file_size dd 100