Subversion Repositories Kolibri OS

Rev

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