2006-08-24 16:33:31 +04:00
|
|
|
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
|
2006-08-28 17:34:54 +04:00
|
|
|
mov ecx,1024/4
|
|
|
|
rep movsd
|
|
|
|
and dword [dir_info+4], 0
|
2006-08-24 16:33:31 +04:00
|
|
|
.nxt2:
|
2006-08-28 17:34:54 +04:00
|
|
|
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
|
2006-08-24 16:33:31 +04:00
|
|
|
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
|
|
|
|
|