0,0 → 1,449 |
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 |
|