forked from KolibriOS/kolibrios
450 lines
8.3 KiB
PHP
450 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,64
|
||
|
rep movsb
|
||
|
mov dword[file_info+12],dir_table
|
||
|
mov dword[file_info+8],DIR_SIZE/512
|
||
|
.nxt2:
|
||
|
mcall 58,file_info
|
||
|
mov ecx,DIR_SIZE/32
|
||
|
mov esi,dir_table
|
||
|
.nxt:
|
||
|
mov al,[esi]
|
||
|
cmp al,0xe5
|
||
|
je .no
|
||
|
test al,al
|
||
|
jz .end
|
||
|
test byte[esi+12],11000b
|
||
|
jnz .no
|
||
|
mov eax,[esi+7]
|
||
|
mov al,'.'
|
||
|
cmp eax,'.MID'
|
||
|
je .ok
|
||
|
cmp eax,'.KAR'
|
||
|
jne .no
|
||
|
.ok:
|
||
|
mov [esi+8],eax
|
||
|
pusha
|
||
|
mov edi,edx
|
||
|
mov ecx,12
|
||
|
rep movsb
|
||
|
and byte[edi],0
|
||
|
mov ecx,edi
|
||
|
sub ecx,fnbuf
|
||
|
mov esi,fnbuf
|
||
|
call PL_add
|
||
|
popa
|
||
|
.no:
|
||
|
add esi,32
|
||
|
loop .nxt
|
||
|
add dword[file_info+4],DIR_SIZE/512
|
||
|
jmp .nxt2
|
||
|
.end:
|
||
|
mov ebx,file_info
|
||
|
and dword[ebx+4],0
|
||
|
mov [fsize],1
|
||
|
mov dword[ebx+12],workarea
|
||
|
jmp red;still
|
||
|
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
|
||
|
|