Subversion Repositories Kolibri OS

Rev

Rev 485 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
134 diamond 1
key_codes db 27,182,109,115,114,122,98,118,108,120,99,13,8,32,0,    0, 0,0
2
   db 180,181,93,91
3
; bottom actions
4
   db  0, 0, 0, 0, 0,185,0, 0, 0, 0,0,0,92
5
btn_codes db  1,  0,  0,  9, 10,  3, 7,  6,  8,  4, 5, 0,0, 0,101,100,11,2
6
   db   0,  0, 0, 0
7
; bottom actions
8
   db 35,49,48,37,31,32,41,42,40,36,103,104,0
9
jmps dw  _close, kDel,kMute, bList.shuf, bList.repe, bList.prev, bList.next
10
   dw  bList.stop, kLoad, Xpress, Rewind.space, auto_load,Rewind, Rewind.space
11
   dw  bReverse, bShade, bList, bBar, bOctU, bOctD, bSelTrack, bSelChannel
12
; bottom actions
13
   dw kDel,bLsave,bLload,bRemAll,bAdd,bAddDir,bSelZero,bInvSel,bSelAll,bRemCrop
14
   dw  bMinimize,bAbout,bResetTrk
1588 mario79 15
;------------------------------------------------------------------------
134 diamond 16
jmps_end:
17
 
18
key:
19
    mov  eax,2
485 heavyiron 20
    mcall
134 diamond 21
    mov  edi,key_codes
22
    cmp  ah,48
23
    jb   .jump
24
    cmp  ah,57
25
    ja   .jump
26
    sub  ah,48
27
    mov  byte[channel],ah
28
    jmp  midi_kill
29
  .jump:
30
    mov  ecx,(jmps_end-jmps)/2
31
    mov  ebx,edi
32
    shr  eax,8
33
    repne scasb
34
    jne  play_.noplsel
35
    sub  edi,ebx
36
    jmp  word[jmps+edi*2-2]
37
  kDel:
38
    call PL_del
39
    call PL_show
40
    jmp  still
41
  kMute:
42
    xor  [flag],FL_MUTE
43
    jmp  still
44
  kLoad:
45
;    dps  'Load'
46
    cmp  [list_count],LISTITEMS
47
    jbe  noparam
48
    jmp  still
49
  Xpress:
50
    mov  eax,IPC_PLAY
51
    call ipc_send
52
    jmp  still;Rewind.space
53
 auto_load:
54
    call PL_get1stsel
55
    mov  eax,ebx
56
  play_:
57
    mov  [play_num],eax
58
    call PL_getbyindex
59
    mov  edi,filename;fnbuf
60
    rep  movsb
61
    xor  eax,eax
62
    mov  byte[edi],al
63
    and  [flag],not FL_ADD
64
    or   [flag],FL_PLAY
65
    jmp  open_file
66
  .noplsel:
67
    call PL_get1stsel
68
    test ebx,ebx
69
    jz   .noupward
70
    cmp  al,178
71
    jne  .noupa
72
  .seldec:
73
    dec  ebx;[listsel]
74
  .listdraw:
75
    call PL_clearsel
76
    mov  eax,ebx
77
    call PL_getbyindex
78
    or   word[esi-2],FL_MULSEL
79
    call PL_show
80
    jmp  still
81
  .noupa:
82
    cmp  al,184
83
    jne  .noupward
84
    dec  [listsel]
85
  .swap:
86
    dec  ebx
87
    call PL_swap
88
    jmp  .listdraw
89
  .noupward:
90
    inc  ebx
91
    cmp  bl,[list_count]
92
    jae  still
93
    cmp  al,177
94
    je  .listdraw
95
  .nodowna:
96
    cmp  al,183
97
    jne  still
98
    inc  [listsel]
99
    jmp  .swap
100
  Rewind:
101
    push [midi_limit]
102
    pop  [cur_ptr]
103
    and  [cur_tick],0
104
    jmp  red
105
  .space:
106
    cmp  [tick_count],0
107
    jz   still
108
    mov  eax,IPC_TRIG
109
    call ipc_send
110
    jmp  red
1588 mario79 111
;------------------------------------------------------------------------
134 diamond 112
  button:
113
    mov  eax,17
485 heavyiron 114
    mcall
134 diamond 115
    cmp  ah,20
116
    jb   .nobott
117
    cmp  ah,25
118
    ja   .nobott
119
    sub  ah,20
120
    mov  [popup],ah
121
  .sh:
122
    or   [flag],FL_BOTTRED
123
    call PL_show
124
    jmp  still
125
  .nobott:
126
    cmp  ah,31
127
    jb   .nopop
128
    cmp  ah,50
129
    ja   .nopop
130
    mov  [popup],-1
131
    or   [flag],FL_BOTTRED
132
    call PL_show
133
 
134
SH_POPUP equ 10
135
  if SH_POPUP eq 1
136
    mov  ebx,eax
137
    shr  ebx,8
138
    dps  'Popup#='
139
    dpd  ebx
140
    jmp  .sh
141
  end if
142
  .nopop:
143
    mov  edi,btn_codes
144
    jmp  key.jump
145
  bReverse:
146
    xor  [flag],FL_REVERSE
147
    call draw_bar
148
    jmp  still
149
  _close:
150
    call kill
151
    or   eax,-1
485 heavyiron 152
    mcall
134 diamond 153
 
154
  bShade:
155
    call Shade
156
    jmp  still
157
  Shade:
158
    xor  [flag],FL_HIDDEN
159
    test [flag],FL_HIDDEN
160
    jz  .open
161
    mov  esi,14
162
    mov  [coo],main_coo2
163
    jmp  .op
164
  .open:
165
    mov  esi,WND_HEIGHT
166
    mov  [coo],main_coo
167
  .op:
168
    mov  ebx,-1
169
    mov  ecx,ebx
170
    mov  edx,ebx
171
    mov  eax,67
485 heavyiron 172
    mcall
134 diamond 173
    ret
1588 mario79 174
;------------------------------------------------------------------------
134 diamond 175
  bMinimize:
176
;    mcall 18,10
177
    jmp  still
1588 mario79 178
;------------------------------------------------------------------------
134 diamond 179
  bList:
180
    mov  [popup],-1
181
    mov  edx,[listsel]
182
    call PL_getitemclick
183
    mov  [listsel],eax
184
    mcall 66,3
185
    mov  ebx,eax
186
;    dph  ebx
187
    test ebx,1100b
188
    jnz  .mul
189
    call PL_clearsel
190
    test ebx,11b
191
    jz   .skipor
192
    mov  ecx,[listsel]
193
    mov  [listsel],edx
194
    cmp  ecx,edx
195
    je   .skipor
196
    ja   .above
197
    xchg ecx,edx
198
  .above:
199
    sub  ecx,edx
200
    inc  ecx
201
    mov  eax,edx
202
    push ecx
203
    call PL_getbyindex
204
    sub  esi,2
205
    pop  ecx
206
    call PL_shiftsel
207
    jmp  .plsh
208
  .mul:
209
    bts  [flag],15
210
    jc   .skipor
211
    mov  eax,edx
212
    call PL_getbyindex
213
    or  word[esi-2],FL_MULSEL
214
  .skipor:
215
    mov  eax,[listsel]
216
    call PL_getbyindex
217
    xor  word[esi-2],FL_MULSEL
218
  .plsh:
219
    call PL_show
220
    mcall 40,111b
221
    mcall 23,30
222
    push eax
223
    mcall 40,1000111b
224
    pop  eax
225
    cmp  eax,3
226
    jne  still
227
    mcall 17
228
    cmp  ah,11
229
    jne  still
230
    call PL_getitemclick
231
    cmp  eax,[listsel]
232
    je  auto_load
233
    mov  [listsel],eax
234
    call PL_show
235
    jmp  still
236
  .repe:
237
    xor  [flag],FL_REPEAT
238
    jmp  red
239
  .stop:
240
    mov  eax,IPC_PAUS
241
    call ipc_send
242
    jmp  Rewind
243
  .shuf:
244
    xor  [flag],FL_SHUFFLE
245
    jmp  red
246
  .prev:
247
    mov  eax,[play_num]
248
    test eax,eax
249
    jz   still
250
    dec  eax
251
    jmp  play_
252
  .next:
253
    mov  eax,[play_num]
254
    inc  eax
255
    cmp  al,[list_count]
256
    jae  still
257
    jmp  play_
1588 mario79 258
;------------------------------------------------------------------------
134 diamond 259
  bBar:
260
    cmp  [tick_count],0
261
    jz   still
262
    mov  eax,37
263
    mov  ebx,1
485 heavyiron 264
    mcall
134 diamond 265
    mov  ebp,[coo]
266
    sub  eax,[ebp-16]
267
    shr  eax,16
268
    mov  ebx,[tick_count]
269
    mul  ebx
270
    mov  ebx,[ebp-20]
271
    div  ebx
272
    mov  ebx,eax ; ebx - selected tick
273
    xor  ecx,ecx
274
    mov  esi,[midi_limit]
275
  .further:
276
    lodsw
277
    and  eax,0x7f
278
    add  ecx,eax
279
    cmp  ecx,ebx
280
    jb   .further
281
    sub  ecx,eax
282
    mov  [cur_tick],ecx
283
    sub  esi,2
284
    mov  [cur_ptr],esi
285
  drw:
286
    jmp  red
1588 mario79 287
;------------------------------------------------------------------------
134 diamond 288
OCT_CH equ 3
1588 mario79 289
;------------------------------------------------------------------------
134 diamond 290
  bOctU:
291
    add  [octave],OCT_CH
292
    jmp  midi_kill
293
  bOctD:
294
    sub  [octave],OCT_CH
295
    jmp  midi_kill
296
  bSelChannel:
297
    call get_num
298
    cmp  eax,-1
299
    je   still
300
    dps  <13,10,'Channel#'>
301
    dpd  eax
302
    mov  [channel],eax
303
    jmp  midi_kill
304
  bSelTrack:
305
    call get_num
306
    cmp  eax,-1
307
    je   still
308
    dps  <13,10,'Track#'>
309
    dpd  eax
310
    mov  [sel_track],al
311
    jmp  midi_kill
312
  bResetTrk:
313
    xor  eax,eax
314
    mov  [sel_track],al
315
    mov  [channel],eax
316
    dps  <13,10,'Both track & channel are 0',13,10>
317
    jmp  midi_kill
318
  bLsave:
319
    call PL_save
320
  bLload:
321
    call PL_load
322
    jmp  red
323
  bRemAll:
324
    and  [list_count],0
325
    mov  [play_limit],playlist-2
326
    jmp  red
1588 mario79 327
;------------------------------------------------------------------------
328
bAdd:
329
	movzx eax,[list_count]
330
	dpd  eax
331
	mov	[OpenDialog_data.type],0	; Open
332
	or	[flag],FL_LOCK
333
	push    dword OpenDialog_data
334
	call    [OpenDialog_Start]
335
	and	[flag],not FL_LOCK
336
	cmp	[OpenDialog_data.status],1
337
	jne	still
338
 
339
	mov  edi,filename
340
	cmp  byte[edi],0
341
	jz   still
342
	call str_len
343
	xchg eax,ecx
344
	mov  esi,edi
345
	jmp  add_song
346
;------------------------------------------------------------------------
347
bAddDir:
348
	mov	[OpenDialog_data.type],2	; Dir
349
	or	[flag],FL_LOCK
350
	push    dword OpenDialog_data
351
	call    [OpenDialog_Start]
352
	and	[flag],not FL_LOCK
353
	cmp	[OpenDialog_data.status],1
354
	jne	still
355
 
356
	mov  esi,filename
357
	mov  edi,fnbuf
358
	xor	eax,eax
359
@@:
360
	cld
361
	lodsb
362
	stosb
363
	test	eax,eax
364
	jnz	@r
365
	mov	[edi-1],byte '/'
366
	mov	edx,edi
367
 
368
	and     dword [dir_info+4], 0
369
.nxt2:
139 diamond 370
        mcall   70, dir_info
1588 mario79 371
	test	eax,eax
372
	jnz	red
373
 
139 diamond 374
        test    byte [dir_table+32], 11000b     ; exclude directories & vol label
375
        jnz     .no
376
        mov     edi, dir_table+32+40
377
        mov     esi, edi
378
        xor     eax, eax
379
        or      ecx, -1
380
        repnz   scasb
381
        mov     eax, [edi-5]
382
        or      eax, 0x20202000
383
        cmp     eax, '.mid'
384
        jz      .ok
385
        cmp     eax, '.kar'
386
        jnz     .no
387
.ok:
388
        lea     ecx, [edi-dir_table-32-40-1]
389
        mov     edi, edx
390
        rep     movsb
391
        mov     ecx, edi
392
        mov     esi, fnbuf
393
        sub     ecx, esi
394
        call    PL_add
395
.no:
1588 mario79 396
	mov	eax,[dir_info+4]
397
	cmp	eax,[dir_table+8]
398
	je	red
399
	inc     dword [dir_info+4]
400
	jmp     .nxt2
401
;------------------------------------------------------------------------
134 diamond 402
  bSelZero:
403
    call PL_clearsel
404
    jmp  red
405
  bInvSel:
406
    call PL_invsel
407
    jmp  red
408
  bSelAll:
409
    call PL_clearsel
410
    call PL_invsel
411
    jmp  red
412
  bRemCrop:
413
    call PL_invsel
414
    call PL_del
415
    jmp  bSelAll
416
  bAbout:
417
    mov  edx,about1
418
    call debug_outstr
419
    jmp  still
1588 mario79 420
;------------------------------------------------------------------------
134 diamond 421
get_num:  ; out: eax-number entered
422
    or   [flag],FL_LOCK
423
    mcall 10
424
    dpd  eax
425
    cmp  eax,1
426
    jne  .nored
427
    call draw_window
428
    jmp  get_num
429
  .nored:
430
    cmp  eax,2
431
    jne  .nokey
432
    mcall 2
433
    movzx eax,ah
434
    sub  eax,'0'
435
    jl   .none
436
    cmp  eax,9
437
    jbe  .ok
438
  .none:
439
    mov  eax,-1
440
  .ok:
441
    and  [flag],not FL_LOCK
442
    ret
443
  .nokey:
444
    cmp  eax,3
445
    jne  get_num
446
    mcall 17
447
    jmp  get_num
1588 mario79 448
;------------------------------------------------------------------------
134 diamond 449
find_slash:
450
; in: edi-filename, out: edi-slash ptr-1
451
    push eax ecx
452
    call str_len
453
    mov  ecx,eax
454
    std
455
    add  edi,eax
456
    mov  al,'/'
457
    repne scasb
458
    cld
459
    add  edi,2
460
    pop  ecx eax
461
    ret
1588 mario79 462
;------------------------------------------------------------------------