kolibrios-fun/programs/media/midamp/trunk/event.inc
Evgeny Grechnikov (Diamond) d3ae4b4e07 Kernel: rewritten function 4
@rcher, ac97wav, midamp, rtfread: modified to use function 70

git-svn-id: svn://kolibrios.org@139 a494cfbc-eb01-0410-851d-a64ba20cac60
2006-08-28 13:34:54 +00:00

436 lines
8.3 KiB
PHP

key_codes db 27,182,109,115,114,122,98,118,108,120,99,13,8,32,0, 0, 0,0
db 180,181,93,91
; bottom actions
db 0, 0, 0, 0, 0,185,0, 0, 0, 0,0,0,92
btn_codes db 1, 0, 0, 9, 10, 3, 7, 6, 8, 4, 5, 0,0, 0,101,100,11,2
db 0, 0, 0, 0
; bottom actions
db 35,49,48,37,31,32,41,42,40,36,103,104,0
jmps dw _close, kDel,kMute, bList.shuf, bList.repe, bList.prev, bList.next
dw bList.stop, kLoad, Xpress, Rewind.space, auto_load,Rewind, Rewind.space
dw bReverse, bShade, bList, bBar, bOctU, bOctD, bSelTrack, bSelChannel
; bottom actions
dw kDel,bLsave,bLload,bRemAll,bAdd,bAddDir,bSelZero,bInvSel,bSelAll,bRemCrop
dw bMinimize,bAbout,bResetTrk
jmps_end:
key:
mov eax,2
int 0x40
mov edi,key_codes
cmp ah,48
jb .jump
cmp ah,57
ja .jump
sub ah,48
mov byte[channel],ah
jmp midi_kill
.jump:
mov ecx,(jmps_end-jmps)/2
mov ebx,edi
shr eax,8
repne scasb
jne play_.noplsel
sub edi,ebx
jmp word[jmps+edi*2-2]
kDel:
call PL_del
call PL_show
jmp still
kMute:
xor [flag],FL_MUTE
jmp still
kLoad:
; dps 'Load'
cmp [list_count],LISTITEMS
jbe noparam
jmp still
Xpress:
mov eax,IPC_PLAY
call ipc_send
jmp still;Rewind.space
auto_load:
call PL_get1stsel
mov eax,ebx
play_:
mov [play_num],eax
call PL_getbyindex
mov edi,filename;fnbuf
rep movsb
xor eax,eax
mov byte[edi],al
and [flag],not FL_ADD
or [flag],FL_PLAY
jmp open_file
.noplsel:
call PL_get1stsel
test ebx,ebx
jz .noupward
cmp al,178
jne .noupa
.seldec:
dec ebx;[listsel]
.listdraw:
call PL_clearsel
mov eax,ebx
call PL_getbyindex
or word[esi-2],FL_MULSEL
call PL_show
jmp still
.noupa:
cmp al,184
jne .noupward
dec [listsel]
.swap:
dec ebx
call PL_swap
jmp .listdraw
.noupward:
inc ebx
cmp bl,[list_count]
jae still
cmp al,177
je .listdraw
.nodowna:
cmp al,183
jne still
inc [listsel]
jmp .swap
Rewind:
push [midi_limit]
pop [cur_ptr]
and [cur_tick],0
jmp red
.space:
cmp [tick_count],0
jz still
mov eax,IPC_TRIG
call ipc_send
jmp red
button:
mov eax,17
int 0x40
cmp ah,20
jb .nobott
cmp ah,25
ja .nobott
sub ah,20
mov [popup],ah
.sh:
or [flag],FL_BOTTRED
call PL_show
jmp still
.nobott:
cmp ah,31
jb .nopop
cmp ah,50
ja .nopop
mov [popup],-1
or [flag],FL_BOTTRED
call PL_show
SH_POPUP equ 10
if SH_POPUP eq 1
mov ebx,eax
shr ebx,8
dps 'Popup#='
dpd ebx
jmp .sh
end if
.nopop:
mov edi,btn_codes
jmp key.jump
bReverse:
xor [flag],FL_REVERSE
call draw_bar
jmp still
_close:
call kill
or eax,-1
int 0x40
bShade:
call Shade
jmp still
Shade:
xor [flag],FL_HIDDEN
test [flag],FL_HIDDEN
jz .open
mov esi,14
mov [coo],main_coo2
jmp .op
.open:
mov esi,WND_HEIGHT
mov [coo],main_coo
.op:
mov ebx,-1
mov ecx,ebx
mov edx,ebx
mov eax,67
int 0x40
ret
bMinimize:
; mcall 18,10
jmp still
bList:
mov [popup],-1
mov edx,[listsel]
call PL_getitemclick
mov [listsel],eax
mcall 66,3
mov ebx,eax
; dph ebx
test ebx,1100b
jnz .mul
call PL_clearsel
test ebx,11b
jz .skipor
mov ecx,[listsel]
mov [listsel],edx
cmp ecx,edx
je .skipor
ja .above
xchg ecx,edx
.above:
sub ecx,edx
inc ecx
mov eax,edx
push ecx
call PL_getbyindex
sub esi,2
pop ecx
call PL_shiftsel
jmp .plsh
.mul:
bts [flag],15
jc .skipor
mov eax,edx
call PL_getbyindex
or word[esi-2],FL_MULSEL
.skipor:
mov eax,[listsel]
call PL_getbyindex
xor word[esi-2],FL_MULSEL
.plsh:
call PL_show
mcall 40,111b
mcall 23,30
push eax
mcall 40,1000111b
pop eax
cmp eax,3
jne still
mcall 17
cmp ah,11
jne still
call PL_getitemclick
cmp eax,[listsel]
je auto_load
mov [listsel],eax
call PL_show
jmp still
.repe:
xor [flag],FL_REPEAT
jmp red
.stop:
mov eax,IPC_PAUS
call ipc_send
jmp Rewind
.shuf:
xor [flag],FL_SHUFFLE
jmp red
.prev:
mov eax,[play_num]
test eax,eax
jz still
dec eax
jmp play_
.next:
mov eax,[play_num]
inc eax
cmp al,[list_count]
jae still
jmp play_
bBar:
cmp [tick_count],0
jz still
mov eax,37
mov ebx,1
int 0x40
mov ebp,[coo]
sub eax,[ebp-16]
shr eax,16
mov ebx,[tick_count]
mul ebx
mov ebx,[ebp-20]
div ebx
mov ebx,eax ; ebx - selected tick
xor ecx,ecx
mov esi,[midi_limit]
.further:
lodsw
and eax,0x7f
add ecx,eax
cmp ecx,ebx
jb .further
sub ecx,eax
mov [cur_tick],ecx
sub esi,2
mov [cur_ptr],esi
drw:
jmp red
OCT_CH equ 3
bOctU:
add [octave],OCT_CH
jmp midi_kill
bOctD:
sub [octave],OCT_CH
jmp midi_kill
bSelChannel:
call get_num
cmp eax,-1
je still
dps <13,10,'Channel#'>
dpd eax
mov [channel],eax
jmp midi_kill
bSelTrack:
call get_num
cmp eax,-1
je still
dps <13,10,'Track#'>
dpd eax
mov [sel_track],al
jmp midi_kill
bResetTrk:
xor eax,eax
mov [sel_track],al
mov [channel],eax
dps <13,10,'Both track & channel are 0',13,10>
jmp midi_kill
bLsave:
call PL_save
bLload:
call PL_load
jmp red
bRemAll:
and [list_count],0
mov [play_limit],playlist-2
jmp red
bAdd:
movzx eax,[list_count]
dpd eax
call fopen
mov edi,filename
cmp byte[edi],0
jz still
call str_len
xchg eax,ecx
mov esi,edi
jmp add_song
bAddDir:
call fopen
mov edi,filename
cmp byte[edi],0
jz still
call find_slash
lea edx,[edi-filename+fnbuf] ; edx -> '/'
and byte[edi],0
mov esi,filename
mov edi,fnbuf
mov ecx,1024/4
rep movsd
and dword [dir_info+4], 0
.nxt2:
mcall 70, dir_info
cmp ebx, 1
jnz red ;still
test byte [dir_table+32], 11000b ; exclude directories & vol label
jnz .no
mov edi, dir_table+32+40
mov esi, edi
xor eax, eax
or ecx, -1
repnz scasb
mov eax, [edi-5]
or eax, 0x20202000
cmp eax, '.mid'
jz .ok
cmp eax, '.kar'
jnz .no
.ok:
lea ecx, [edi-dir_table-32-40-1]
mov edi, edx
rep movsb
mov ecx, edi
mov esi, fnbuf
sub ecx, esi
call PL_add
.no:
inc dword [dir_info+4]
jmp .nxt2
bSelZero:
call PL_clearsel
jmp red
bInvSel:
call PL_invsel
jmp red
bSelAll:
call PL_clearsel
call PL_invsel
jmp red
bRemCrop:
call PL_invsel
call PL_del
jmp bSelAll
bAbout:
mov edx,about1
call debug_outstr
jmp still
get_num: ; out: eax-number entered
or [flag],FL_LOCK
mcall 10
dpd eax
cmp eax,1
jne .nored
call draw_window
jmp get_num
.nored:
cmp eax,2
jne .nokey
mcall 2
movzx eax,ah
sub eax,'0'
jl .none
cmp eax,9
jbe .ok
.none:
mov eax,-1
.ok:
and [flag],not FL_LOCK
ret
.nokey:
cmp eax,3
jne get_num
mcall 17
jmp get_num
find_slash:
; in: edi-filename, out: edi-slash ptr-1
push eax ecx
call str_len
mov ecx,eax
std
add edi,eax
mov al,'/'
repne scasb
cld
add edi,2
pop ecx eax
ret