Subversion Repositories Kolibri OS

Rev

Rev 2290 | Rev 5449 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1794 yogev_ezra 1
 
2
;   Compile with flat assembler
3
;   Программка позволяющая проигрывать плейлист
4
;   Разработал:   ДедОк  :)
5
6
 
7
8
 
9
10
 
11
	    dd	   0x01 	    ; header version
12
	    dd	   START	    ; start of code
13
	    dd	   I_END	    ; size of image
14
	    dd	   0x25000	     ; memory for app
15
	    dd	   0x20000	     ; esp
16
	    dd	   playlist,  0x0
17
18
 
1795 yogev_ezra 19
1794 yogev_ezra 20
 
21
cmp  [playlist],0x00000000
2290 leency 22
jne  dprod
23
mcall  -1
24
dprod:
25
or   [trig_sys],40h
1794 yogev_ezra 26
call scandr
27
jmp  mmm.seach
28
still:
29
    not   [trig_sys]
30
    or	 [trig_sys],400h
31
    not   [trig_sys]
32
    or	 [trig_sys],200h
33
    call enproc
34
    call delproc
35
    mov  eax,23 		 ; wait here for event
36
    mov  ebx,20
37
    mcall
38
    cmp  eax,1			; redraw request ?
39
    je	 red
40
    cmp  eax,3			; button in buffer ?
41
    je	button
42
    test [trig_sys],200h
43
    jz	 next_song
44
    jmp  still
45
next_song:
46
    add  [poz_butt],1
47
    movzx eax,[poz_song]
48
    add  eax,1
49
    mov  [poz_song],al
50
    mov  dx,255
51
    mul  dx
52
    mov  [song_poz], eax
53
    movzx eax,[poz_song]
54
    sub  eax,1
55
    cmp  [song_count],eax
56
    ja	 .dgo
57
    mov  [poz_song],1
58
    mov  [song_poz],255
59
    mov  [poz_butt],6
60
.dgo:
61
    call  load_song
62
    call procskan
63
    call start
64
    or	 [trig_sys],200h
65
    call draw_window
66
    jmp  still
67
red:
68
    call draw_window
69
    jmp  still
70
button: 		      ; button
71
    mov   eax,17
72
    mcall
73
    cmp ah,1
74
    je	close
75
    cmp ah,2
76
    je	mmm
77
    cmp ah,3
78
    je	mma
79
    cmp ah,4
80
    je	mmd
81
    cmp ah,5
82
    je	mmf
83
    cmp ah,38
84
    jb	mma
85
    ret
86
close:
87
    mov  eax,-1
88
    mcall
89
mma:
90
    mov [poz_butt],ah
91
    mov [poz_song],ah
92
    sub [poz_song],5
93
    movzx eax,[poz_song]
94
    add  eax,[sme]
95
    mov  [poz_song],al
96
    mov  dx,255
97
    mul  dx
98
    mov  [song_poz], eax
99
    call  load_song
100
    call procskan
101
    call start
102
    or	 [trig_sys],200h
103
    call draw_window
104
    jmp still
105
mmw:
106
    mov  ebx,file_info2
107
    mov  ecx,[razm_str]
108
    add  dword [ebx+4],ecx
109
    or	 [trig_sys],40h
110
    jmp  mmm.seach
111
    ret
112
mmm:
113
.seach:
114
    call getstring
115
    call get_drive
116
    call put_db
117
    call draw_window
118
    test [trig_sys],04h
119
    jz	 mmw
120
    jmp  still
121
mmd:
122
    cmp  [poz_db3],510
123
    jb	 .emd
124
    sub  [poz_db3],255
125
    add  [poz_butt],1
126
    sub  [sme],1
127
.emd:
128
    call draw_window
129
    jmp  still
130
mmf:
131
    add  [poz_db3],255
132
    sub  [poz_butt],1
133
    add  [sme],1
134
    call draw_window
135
    jmp  still
136
procskan:
137
    mov  [num_proc],255
138
qqqqq:
139
    mov  eax,9
140
    mov  ebx,pib
141
    mov  ecx, [num_proc]
142
    mcall
143
    cld
144
    lea si,[pib.process_name]
145
    lea di,[minus]
146
    mov cx,7
147
    rep cmps byte [si],[di]
148
    jcxz mat
149
    sub  [num_proc],1
150
    cmp  [num_proc],1
151
    jne  qqqqq
152
    ret
153
mat:
154
    mov eax,18
155
    mov ebx,2
156
    mov ecx,[num_proc]
157
    mcall
158
    jmp  procskan
159
scandr:
160
    mov  eax,18
161
    mov  ebx,11
162
    mov  ecx,1
163
    mov  edx,scan_rez
164
    mcall
165
    ret
166
mountpl:
167
    mov  cx,255
168
    cld
169
    lea  di,[fl]
170
    mov  al,00h
171
    repne stos byte [di]
172
    cld
173
    mov  cx,6
174
    lea  si,[play_list]
175
    lea  di,[fl]
176
    rep movs byte [di],[si]
177
    mov  cx,0
178
    ret
179
get_drive:
180
    mov  al,byte[scan_rez+1]
181
    mov  [my_draw],al
182
    mov  [ns],48
183
    cmp  [my_draw],0
184
    jne  .c0
185
    or	 [trig_sys],01h
186
.c0:
187
    cmp  [my_draw],0x80
188
    jb	 .h0
189
    sub  [my_draw],0x80
190
    mov  [n_razd],1
191
    mov  [nd],49
192
    mov  al,[cd_0]
193
    mov  [td],al
194
    call  folscan
195
.h0:
196
    cmp  [trig_scan],1
197
    je	 ex1
198
    cmp  [my_draw],0x40
199
    jb	 .c1
200
    sub  [my_draw],0x40
201
    mov  al,byte[scan_rez+2]
202
    mov  [n_razd],al
203
    add  al,48
204
    mov  [nd],al
205
    mov  al,[hd_0]
206
    mov  [td],al
207
    call  folscan
208
.c1:
209
    cmp  [trig_scan],1
210
    je	 ex1
211
    cmp  [my_draw],0x20
212
    jb	 .h1
213
    sub  [my_draw],0x20
214
    mov  [n_razd],1
215
    mov  [nd],49
216
    mov  al,[cd_0]
217
    mov  [ns],19
218
    call  folscan
219
.h1:
220
    cmp  [trig_scan],1
221
    je	 ex1
222
    cmp  [my_draw],0x10
223
    jb	 .c2
224
    sub  [my_draw],0x10
225
    mov  al,byte[scan_rez+3]
226
    mov  [n_razd],al
227
    add  al,48
228
    mov  [nd],al
229
    mov  al,[hd_0]
230
    mov  [td],al
231
    mov  [ns],49
232
    call  folscan
233
.c2:
234
    cmp  [trig_scan],1
235
    je	 ex1
236
    cmp  [my_draw],0x08
237
    jb	 .h2
238
    sub  [my_draw],0x08
239
    mov  [n_razd],1
240
    mov  [nd],49
241
    mov  al,[cd_0]
242
    mov  [td],al
243
    mov  [ns],50
244
    call  folscan
245
.h2:
246
    cmp  [trig_scan],1
247
    je	 ex1
248
    cmp  [my_draw],0x04
249
    jb	 .c3
250
    sub  [my_draw],0x04
251
    mov  al,byte[scan_rez+4]
252
    mov  [n_razd],al
253
    add  al,48
254
    mov  [nd],al
255
    mov  al,[hd_0]
256
    mov  [td],al
257
    mov  [ns],50
258
    call folscan
259
.c3:
260
    cmp  [trig_scan],1
261
     je  ex1
262
    cmp  [my_draw],0x02
263
    jb	 .h3
264
    sub  [my_draw],0x02
265
    mov  [n_razd],1
266
    mov  [nd],49
267
    mov  al,[cd_0]
268
    mov  [td],al
269
    mov  [ns],51
270
    call folscan
271
.h3:
272
    cmp  [trig_scan],1
273
    je	 ex1
274
    cmp  [my_draw],0x01
275
    jb	 ex1
276
    sub  [my_draw],0x01
277
    mov  al,byte[scan_rez+5]
278
    mov  [n_razd],al
279
    add  al,48
280
    mov  [nd],al
281
    mov  al,[hd_0]
282
    mov  [td],al
283
    mov  [ns],51
284
    call folscan
285
ex1:
286
    cmp  [fold],05h
287
    jne  ext2
288
    or	 [trig_sys],04h
289
ext2:
290
    cmp  [fold],0Ah
291
    jne  ext3
292
    or	 [trig_sys],08h
293
    jmp  eext
294
ext3:
295
    mov  [trig_scan],0
296
    not  [trig_sys]
297
    or	 [trig_sys],0Eh
298
    not  [trig_sys]
299
eext:
300
    ret
301
folscan:
302
    cmp  [trig_scan],1
303
    je	 .out2
304
    mov  eax,70
305
    mov  ebx,file_info
306
    mcall
307
    mov  [fold],eax
308
    cmp  [fold],0
309
    jne  .out
310
    mov  al,1
311
    mov  [trig_scan],al
312
    jmp  .out2
313
.out:
314
     mov  al,1
315
    sub  [n_razd],al
316
    mov  al,1
317
    sub  [nd],al
318
    cmp  [n_razd],0
319
    jne  folscan
320
.out2:
321
    ret
322
get_play:
323
    mov  cx,255
324
    lea  si,[floc]
325
    lea  di,[playlist]
326
    rep movs byte [di],[si]
327
    mov  cx,0
328
ret
329
getstring:
330
    mov  eax,70
331
    mov  ebx,file_info2
332
    mov  dword [ebx+12], 255
333
    mov  dword [ebx+16],string1
334
    mov  dword [ebx+21],playlist
335
    mcall
336
    cmp eax,6
337
    jne .pro
338
    or	 [trig_sys],04h
339
    call draw_window
340
    jmp  still
341
.pro:
342
343
 
344
    je	.exit
345
    call rus_m
346
    cld
347
    lea  di,[string1]
348
    mov  cx,255
349
    mov  al,0ah
350
    repne  scas byte  [es:di]
351
    je	 .calc
352
    mov [razm_str],0
353
    mov  ebx,file_info2
354
    add  dword [ebx+4], 255
355
    or	 [trig_sys],40h
356
    jmp mmm.seach
357
.calc:
358
     mov  [razm_str],255
359
     sub  [razm_str],ecx
360
.kon:
361
    mov  [razm_path],0
362
    cld
363
    lea  di,[string1]
364
    mov  ecx,0
365
.ppr:
366
    cmp byte [es:di],70h
367
    je	.s1
368
    cmp byte [es:di],50h
369
    je	.s1
370
    add  ecx,1
371
    add  di,1
372
    cmp  ecx,[razm_str]
373
    jb	.ppr
374
    jmp .next
375
.s1:
376
    add  di,1
377
    cmp  byte [es:di],33h
378
    je	 .s2
379
    sub  di,1
380
    jmp .next
381
    ret
382
.s2:
383
384
 
385
    mov  [razm_path],ecx
386
    add  [razm_path],2
387
388
 
389
    cld
390
    lea  di,[string1]
391
    mov  cx,0
392
    mov  [zzz],cx
393
.ppre:
394
    cmp byte [es:di],3Ah
395
    je	.se1
396
    add  cx,1
397
    add  di,1
398
    cmp  ecx,[razm_path]
399
    jne  .ppre
400
    jmp  .mount
401
.se1:
402
    add  di,1
403
    cmp  byte [es:di],5Ch
404
    je	 .se2
405
    sub  di,1
406
    jmp  .mount
407
.se2:
408
    cmp  ecx,250
409
    jb	 .se3
410
    mov  ecx,0
411
.se3:
412
    add  cx,2
413
;    mov  [ss2],cx
414
    mov  [zzz],cx
415
.mount:
416
    movzx  ecx,[zzz]
417
    cmp  ecx, [razm_path]
418
    jb	.mount1
419
    or	 [trig_sys],04h
420
    jmp  still
421
.mount1:
422
    mov  ecx,255
423
    cld
424
    lea  di,[fl]
425
    mov  al,00h
426
    repne stos byte [di]
427
    cld
428
    mov  ecx,[razm_path]
429
    sub  cx,[zzz]
430
    lea  si,[string1]
431
    add  si,[zzz]
432
    lea  di,[fl]
433
    rep movs byte [di],[si]
434
    mov  ecx,0
435
.sl_m:
436
    mov  ecx,0
437
    lea  di,[fl]
438
.cikl_mx:
439
    mov  al,byte[di]
440
    mov  [char_con],al
441
    cmp  al,5Ch
442
    je	 .con_sl
443
    jmp  .ext6
444
.con_sl:
445
    mov al,2Fh
446
.ext6:
447
    stos byte [di]
448
    add  ecx,1
449
    cmp  ecx,[razm_path]
450
    jb	.cikl_mx
451
452
 
453
    ret
454
.next:
455
    not  [trig_sys]
456
    or	 [trig_sys],80h
457
    not  [trig_sys]
458
    mov  ebx,file_info2
459
    mov  ecx,[razm_str]
460
    add  dword [ebx+4],ecx
461
    or	 [trig_sys],40h
462
    jmp mmm.seach
463
rus_m:
464
    test  [trig_sys],40h
465
    jnz   ddff
466
    ret
467
ddff:
468
    mov  ecx,0
469
    lea  di,[string1]
470
cicl_m:
471
    mov  al,byte[di]
472
    mov  [char_con],al
473
    shr  al,4
474
    cmp  al,0Eh
475
    je	 min_sor
476
    cmp  al,0Ch
477
    je	 min_sor
478
    cmp  al,0Dh
479
    je	 min_sor
480
    cmp  al,0Fh
481
    je	 min_des
482
    shl  al,4
483
    mov  al,0
484
    jmp  ext5
485
min_sor:
486
    sub  [char_con],40h
487
    jmp  ext5
488
min_des:
489
     sub  [char_con],10h
490
    jmp  ext5
491
ext5:
492
    mov  al,[char_con]
493
    stos byte [di]
494
    add  ecx,1
495
    cmp  ecx,255
496
    jb	cicl_m
497
    not  [trig_sys]
498
    or	 [trig_sys],40h
499
    not  [trig_sys]
500
    ret
501
502
 
503
    test [trig_sys],80h
504
    jz	.exit
505
    add  [song_count],1
506
    add  [poz_db],255
507
    mov  ecx,255
508
    cld
509
    mov  ebx,[poz_db]
510
    lea  di,[memlist+ebx]
511
    mov  al,00h
512
    repne stos byte [di]
513
    cld
514
    mov  ecx,255
515
    lea  si,[floc]
516
    mov  ebx,[poz_db]
517
    lea  di,[memlist+ebx]
518
    rep movs byte [di],[si]
519
    mov  ecx,0
520
.exit:
521
    ret
522
load_song:
523
    cld
524
    mov  ecx,255
525
    lea  di,[song_path]
526
    mov  ebx,[song_poz]
527
    lea  si,[memlist+ebx]
528
    rep movs byte [di],[si]
529
    mov  ecx,0
530
    ret
531
start:
532
    mov  eax,70
533
    mov  ebx,folder_inf
534
    mcall
535
    ret
536
delproc:
537
    test [trig_sys],400h
538
    jnz   .sdf
539
    ret
540
.sdf:
541
       mov  [num_proc],255
542
.fgf:
543
    mov  eax,9
544
    mov  ebx,pib
545
    mov  ecx, [num_proc]
546
    mcall
547
    cld
548
    lea si,[pib.process_name]
549
    lea di,[minus]
550
    mov cx,7
551
    rep cmps byte [si],[di]
552
    jcxz .qwer
553
    sub  [num_proc],1
554
    cmp  [num_proc],1
555
    jne  .fgf
556
     test [trig_sys],200h
557
    ret
558
.qwer:
559
    mov  eax,[pib+process_information.cpu_usage]
560
    mov  [q_takt],eax
561
    cmp  [q_takt],200000
562
    jb	 .asdf
563
    ret
564
.asdf:
565
    add   [count_err],1
566
    cmp   [count_err],6
567
    ja	  .djbn
568
    ret
569
.djbn:
570
    mov   [count_err],0
571
    not   [trig_sys]
572
    or	 [trig_sys],200h
573
    not   [trig_sys]
574
    ret
575
enproc:
576
    mov  [num_proc],255
577
.fgf:
578
    mov  eax,9
579
    mov  ebx,pib
580
    mov  ecx, [num_proc]
581
    mcall
582
    cld
583
    lea si,[pib.process_name]
584
    lea di,[minus]
585
    mov cx,7
586
    rep cmps byte [si],[di]
587
    jcxz .qwer
588
    sub  [num_proc],1
589
    cmp  [num_proc],1
590
    jne  .fgf
591
    ret
592
.qwer:
593
    or	 [trig_sys],400h
594
    ret
595
596
 
597
;   *******  WINDOW DEFINITIONS AND DRAW ********
598
;   *********************************************
599
600
 
601
    mov  eax,48
602
    mov  ebx,3
603
    mov  ecx,sc
604
    mov  edx,sizeof.system_colors
605
    mcall
606
    mov  eax,12 		   ; function 12:tell os about windowdraw
607
    mov  ebx,1			   ; 1, start of draw
608
    mcall
609
				   ; DRAW WINDOW
610
    xor  eax,eax	    ; function 0 : define and draw window
611
    mov  ebx,100*65536+550	   ; [x start] *65536 + [x size]
612
    mov  ecx,100*65536+420	    ; [y start] *65536 + [y size]
613
    mov  edx,[sc.work]		   ; color of work area RRGGBB,8->color gl
614
    or	 edx,0x33000000
615
    mov  edi,title
2291 leency 616
    mcall
1794 yogev_ezra 617
    mov  eax,4
618
    mov  ebx,5*65536+5
619
    mov  ecx,0xC0000000
620
    mov  edx,label1
621
    mov  edi,[sc.work]
622
    mcall
623
    mov  eax,4
624
    mov  ebx,300*65536+5
625
    mov  ecx,0xC0000000
626
    mov  edx,label5
627
    mov  edi,[sc.work]
628
    mcall
629
    mov  eax,4
630
    mov  ebx,300*65536+15
631
    mov  ecx,0xC0000000
632
    mov  edx,label6
633
    mov  edi,[sc.work]
634
    mcall
635
    mov  eax,4
636
    mov  ebx,25*65536+35
637
    mov  ecx,0xC00000dd
638
    mov  edx,song_path
639
    mov  edi,[sc.work]
640
    mcall
641
    mov  eax,4
642
    mov  ebx,100*65536+5
643
    mov  ecx,0xC0000000
644
    mov  edx,playlist
645
    mov  edi,[sc.work]
646
    mcall
647
    test [trig_sys],4h
648
    jnz   .zam1
649
    mov  eax,4
650
    mov  ebx,5*65536+15
651
    mov  ecx,0xC0000000
652
    mov  edx,label3
653
    mov  edi,[sc.work]
654
    mcall
655
    jmp  .zam2
656
.zam1:
657
    mov  eax,4
658
    mov  ebx,5*65536+15
659
    mov  ecx,0xC0000000
660
    mov  edx,label2
661
    mov  edi,[sc.work]
662
    mcall
663
    mov  eax,4
664
    mov  ebx,5*65536+25
665
    mov  ecx,0xC0000000
666
    mov  edx,label4
667
    mov  edi,[sc.work]
668
    mcall
669
.zam2:
670
671
 
672
;    mov  esi,0x50000000
673
;    mov  ecx, [trig_sys]
674
;    mov  edi,[sc.work]
675
;    mov  ebx,0x00080100
676
;    mov  edx,385*65536+25
677
;    mcall
678
    mov  eax,47
679
    mov  esi,0x50000000
680
    mov  ecx, [song_count]
681
    mov  edi,[sc.work]
682
    mov  ebx,0x00030000
683
    mov  edx,500*65536+5
684
    mcall
685
    mov  eax,47
686
    mov  esi,0x50000000
687
    movzx  ecx, [poz_song]
688
    mov  edi,[sc.work]
689
    mov  ebx,0x00030000
690
    mov  edx,500*65536+15
691
    mcall
692
    mov  [bbut],32
693
    mov  [poz_but],48*65536+10
694
    mov  edx,6
695
butt1:
696
    mov  ebx,0*65536+20
697
    mov  ecx,[poz_but]
698
    mov  esi,[color1]
699
    movzx  eax,[poz_butt]
700
    cmp  edx,eax
701
    jne  .uuu
702
    mov  esi,[color2]
703
.uuu:
704
    mov  eax,8
705
    mcall
706
    add  edx,1
707
    add  [poz_but],10*65536
708
    sub  [bbut],1
709
    cmp  [bbut],0
710
    jne   butt1
711
    mov  eax,8
712
    mov  ebx,525*65536+15
713
    mov  ecx,45*65536+15
714
    mov  esi,0x00aaaadd
715
    mov  edx,4
716
    mcall
717
    mov  eax,8
718
    mov  ebx,525*65536+15
719
    mov  ecx,365*65536+15
720
    mov  esi,0x00aaaadd
721
    mov  edx,5
722
    mcall
723
    mov  [ai],32
724
    mov  [list_poz],25*65536+50
725
    mov  ebx,[poz_db3]
726
    mov  [poz_db2],ebx
727
list:
728
    mov  eax,4
729
    mov  ecx,0xC0000000
730
    mov  ebx,[poz_db2]
731
    lea  edx,[memlist+ebx]
732
    mov  ebx, [list_poz]
733
    mov  edi,[sc.work]
734
    mcall
735
    add  [list_poz],10
736
    add  [poz_db2],255
737
    sub  [ai],1
738
    cmp  [ai],0
739
    ja	list
740
    mov  eax,12 		   ; function 12:tell os about windowdraw
741
    mov  ebx,2			   ; 2, end of draw
742
    mcall
743
    ret
744
745
 
746
 
747
 
748
749
 
750
 
2291 leency 751
play_list:     db   '1.kpl',0
1794 yogev_ezra 752
cd_0:	       db   'c',0
753
hd_0:	       db   'h',0
754
label1:        db   'Файл плейлиста:',0
755
label2:        db   'сканирование закончено... :)            ',0
756
label3:        db   'Подождите, пожалуйста, идёт сканирование',0
757
label4:        db   'Воспроизводимый файл:',0
758
label5:        db   'Всего файлов в плейлисте найдено:',0
759
label6:        db   'Номер воспроизводимого файла:',0
760
minus:	       db   'ac97snd',0
761
player:        db   '/rd/1/ac97snd' ,0
762
my_draw        db   0
763
n_razd	       db   0
764
trig_scan      db   0
765
char_con       db   0
766
poz_butt       db   0
767
poz_song       db   0
768
count_err      dd   0
769
num_proc       dd   0
770
q_takt	       dd   0
771
razm_str       dd   0
772
fold	       dd   0
773
razm_path      dd   0
774
trig_sys       dd   0
775
poz_db	       dd   0
776
poz_db2        dd   0
777
poz_db3        dd   255
778
song_poz       dd   0
779
list_poz       dd   5*65536+50
780
song_count     dd   0
781
ai	       dd   0
782
st_r	       dd   0
783
bbut	       dd   0
784
poz_but        dd   0
785
sme	       dd   0
786
color1	       dd   0x006666dd
787
color2	       dd   0x00dddddd
788
ss2	       dd   0
789
zzz	       dw   22
790
scan_rez:
791
	       db   0
792
	       db   0
793
	       db   0
794
	       db   0
795
	       db   0
796
	       db   0
797
	       db   0
798
	       db   0
799
	       db   0
800
	       db   0
801
floc:
802
pc:	       db   '/'
803
td:	       db   'h'
804
dr:	       db   'd'
805
ns	       db   48
806
vc:	       db   '/'
807
nd	       db   48
808
ks:	       db   '/'
809
fl:
810
	       rb   255
811
playlist       rb   255
812
song_path      rb   255
813
folder_inf:
814
	       dd   7
815
	       dd   0
816
	       dd   song_path
817
	       dd   0
818
	       dd   0
819
	       db   0
820
	       dd   player
821
file_info:
822
	       dd   0
823
	       dd   0
824
	       dd   0
825
	       dd   0
826
	       dd   0
827
	       db   0
828
	       dd   floc
829
file_info2:
830
	       dd   0
831
	       dd   0
832
	       dd   0
833
	       dd   0
834
	       dd   0
835
	       db   0
836
	       dd   0
837
string1        rb   255
838
839
 
840
841
 
842
 
843
 
844
sc system_colors
845
pib process_information
846
memlist        rb   65536
847