Rev 552 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 552 | Rev 4620 | ||
---|---|---|---|
1 | ; Playlist support for MIDPLAY |
1 | ; Playlist support for MIDPLAY |
2 | LCOLOR equ 0x00ff00 |
2 | LCOLOR equ 0x00ff00 |
3 | PCOLOR equ 0xffffff |
3 | PCOLOR equ 0xffffff |
4 | 4 | ||
5 | PL_X equ 10 shl 16 |
5 | PL_X equ 10 shl 16 |
6 | PL_Y equ PLY shl 16 |
6 | PL_Y equ PLY shl 16 |
7 | PL_XY equ 10 shl 16+PLY |
7 | PL_XY equ 10 shl 16+PLY |
8 | 8 | ||
9 | PL_show: |
9 | PL_show: |
10 | test [flag],FL_HIDDEN |
10 | test [flag],FL_HIDDEN |
11 | jnz .ex |
11 | jnz .ex |
12 | pusha |
12 | pusha |
13 | and [counter],0 |
13 | and [counter],0 |
14 | mov ebx,PL_X+255 |
14 | mov ebx,PL_X+255 |
15 | mov eax,13 |
15 | mov eax,13 |
16 | mov ecx,PL_Y-1 shl 16+4+9*LISTITEMS |
16 | mov ecx,PL_Y-1 shl 16+4+9*LISTITEMS |
17 | xor edx,edx |
17 | xor edx,edx |
18 | mcall |
18 | mcall |
19 | movzx ecx,byte[list_count] |
19 | movzx ecx,byte[list_count] |
20 | test ecx,ecx |
20 | test ecx,ecx |
21 | jz .ex2 |
21 | jz .ex2 |
22 | push ecx |
22 | push ecx |
23 | imul ecx,9 |
23 | imul ecx,9 |
24 | add ecx,PL_Y-1 shl 16-2 |
24 | add ecx,PL_Y-1 shl 16-2 |
25 | mov edx,11+1 shl 29+1 shl 30 |
25 | mov edx,11+1 shl 29+1 shl 30 |
26 | mov eax,8 |
26 | mov eax,8 |
27 | mcall |
27 | mcall |
28 | pop ecx |
28 | pop ecx |
29 | mov edi,[pl_ptr] |
29 | mov edi,[pl_ptr] |
30 | mov eax,4 |
30 | mov eax,4 |
31 | mov ebx,PL_XY+2 shl 16 |
31 | mov ebx,PL_XY+2 shl 16 |
32 | .sh_loop: |
32 | .sh_loop: |
33 | movzx esi,word[edi] |
33 | movzx esi,word[edi] |
34 | and esi,not FL_MULSEL |
34 | and esi,not FL_MULSEL |
35 | add edi,2 |
35 | add edi,2 |
36 | pusha |
36 | pusha |
37 | mov edx,edi |
37 | mov edx,edi |
38 | mov ecx,[counter] |
38 | mov ecx,[counter] |
39 | test word[edi-2],FL_MULSEL |
39 | test word[edi-2],FL_MULSEL |
40 | jz .nosel |
40 | jz .nosel |
41 | pusha |
41 | pusha |
42 | mov ebx,PL_X+255+1 shl 16-2 |
42 | mov ebx,PL_X+255+1 shl 16-2 |
43 | imul ecx,9 |
43 | imul ecx,9 |
44 | shl ecx,16 |
44 | shl ecx,16 |
45 | add ecx,PL_Y-1 shl 16+8 |
45 | add ecx,PL_Y-1 shl 16+8 |
46 | mov edx,0xc6 |
46 | mov edx,0xc6 |
47 | mov eax,13 |
47 | mov eax,13 |
48 | mcall |
48 | mcall |
49 | popa |
49 | popa |
50 | .nosel: |
50 | .nosel: |
51 | pusha |
51 | pusha |
52 | mov edx,ebx |
52 | mov edx,ebx |
53 | mov esi,0xa0a0a0;0x508cec |
53 | mov esi,0xa0a0a0;0x508cec |
54 | mcall 47,0x30000 |
54 | mcall 47,0x30000 |
55 | popa |
55 | popa |
56 | cmp ecx,[play_num] |
56 | cmp ecx,[play_num] |
57 | je .high |
57 | je .high |
58 | mov ecx,LCOLOR |
58 | mov ecx,LCOLOR |
59 | jmp .int |
59 | jmp .int |
60 | .high: |
60 | .high: |
61 | mov ecx,PCOLOR |
61 | mov ecx,PCOLOR |
62 | .int: |
62 | .int: |
63 | add ebx,25 shl 16 |
63 | add ebx,25 shl 16 |
64 | mcall |
64 | mcall |
65 | popa |
65 | popa |
66 | add edi,esi |
66 | add edi,esi |
67 | add ebx,9 |
67 | add ebx,9 |
68 | inc [counter] |
68 | inc [counter] |
69 | loop .sh_loop2 |
69 | loop .sh_loop2 |
70 | jmp .ex2 |
70 | jmp .ex2 |
71 | .sh_loop2: |
71 | .sh_loop2: |
72 | jmp .sh_loop |
72 | jmp .sh_loop |
73 | .ex2: |
73 | .ex2: |
74 | popa |
74 | popa |
75 | test [flag],FL_BOTTRED |
75 | test [flag],FL_BOTTRED |
76 | jz .nobott |
76 | jz .nobott |
77 | pusha |
77 | pusha |
78 | mcall 7,hdr_raw+8+275*16*3,<275,12>,<10,(WND_HEIGHT-20)> |
78 | mcall 7,hdr_raw+8+275*16*3,<275,12>,<10,(WND_HEIGHT-20)> |
79 | mov ebp,main_coo2 |
79 | mov ebp,main_coo2 |
80 | mov esi,10 shl 16 |
80 | mov esi,10 shl 16 |
81 | mov edi,(WND_HEIGHT-22)shl 16 |
81 | mov edi,(WND_HEIGHT-22)shl 16 |
82 | mov ecx,1 |
82 | mov ecx,1 |
83 | pushd 155 shl 16+5 |
83 | pushd 155 shl 16+5 |
84 | pushd (WND_HEIGHT-22) shl 16+5 |
84 | pushd (WND_HEIGHT-22) shl 16+5 |
85 | call draw_navigation |
85 | call draw_navigation |
86 | add esp,8 |
86 | add esp,8 |
87 | popa |
87 | popa |
88 | call draw_bottom |
88 | call draw_bottom |
89 | and [flag],not FL_BOTTRED |
89 | and [flag],not FL_BOTTRED |
90 | .nobott: |
90 | .nobott: |
91 | .ex: |
91 | .ex: |
92 | ret |
92 | ret |
93 | 93 | ||
94 | PL_add: |
94 | PL_add: |
95 | ; in: esi->filename,ecx->fname_len |
95 | ; in: esi->filename,ecx->fname_len |
96 | jecxz .ex |
96 | jecxz .ex |
97 | cmp [list_count],LISTITEMS |
97 | cmp [list_count],LISTITEMS |
98 | jae .ex |
98 | jae .ex |
99 | pusha |
99 | pusha |
100 | mov edi,[play_limit] |
100 | mov edi,[play_limit] |
101 | mov [edi],cx |
101 | mov [edi],cx |
102 | add edi,2 |
102 | add edi,2 |
103 | rep movsb |
103 | rep movsb |
104 | mov [play_limit],edi |
104 | mov [play_limit],edi |
105 | inc [list_count] |
105 | inc [list_count] |
106 | popa |
106 | popa |
107 | .ex: |
107 | .ex: |
108 | ret |
108 | ret |
109 | 109 | ||
110 | PL_del: |
110 | PL_del: |
111 | movzx ecx,byte[list_count] |
111 | movzx ecx,byte[list_count] |
112 | jecxz .ex |
112 | jecxz .ex |
113 | call PL_get1stsel |
113 | call PL_get1stsel |
114 | mov edx,ebx |
114 | mov edx,ebx |
115 | .lp: |
115 | .lp: |
116 | mov edi,esi |
116 | mov edi,esi |
117 | xor eax,eax |
117 | xor eax,eax |
118 | lodsw |
118 | lodsw |
119 | btr eax,15 |
119 | btr eax,15 |
120 | jc .elp2 |
120 | jc .elp2 |
121 | add esi,eax |
121 | add esi,eax |
122 | jmp .elp |
122 | jmp .elp |
123 | .elp2: |
123 | .elp2: |
124 | push esi ecx |
124 | push esi ecx |
125 | add esi,eax |
125 | add esi,eax |
126 | mov ecx,[play_limit] |
126 | mov ecx,[play_limit] |
127 | sub ecx,esi |
127 | sub ecx,esi |
128 | rep movsb |
128 | rep movsb |
129 | mov [play_limit],edi |
129 | mov [play_limit],edi |
130 | dec [list_count] |
130 | dec [list_count] |
131 | cmp edx,[play_num] |
131 | cmp edx,[play_num] |
132 | ja .no |
132 | ja .no |
133 | dec [play_num] |
133 | dec [play_num] |
134 | .no: |
134 | .no: |
135 | pop ecx esi |
135 | pop ecx esi |
136 | sub esi,2 |
136 | sub esi,2 |
137 | .elp: |
137 | .elp: |
138 | inc edx |
138 | inc edx |
139 | loop .lp |
139 | loop .lp |
140 | .ex: |
140 | .ex: |
141 | ret |
141 | ret |
142 | 142 | ||
143 | PL_getitemclick: |
143 | PL_getitemclick: |
144 | ; out: eax- item # (0..n) |
144 | ; out: eax- item # (0..n) |
145 | mov ebx,1 |
145 | mov ebx,1 |
146 | mov eax,37 |
146 | mov eax,37 |
147 | mcall |
147 | mcall |
148 | sub eax,PLY-1 |
148 | sub eax,PLY-1 |
149 | mov ebx,9 |
149 | mov ebx,9 |
150 | div bl |
150 | div bl |
151 | movzx eax,al |
151 | movzx eax,al |
152 | ret |
152 | ret |
153 | 153 | ||
154 | PL_getbyindex: |
154 | PL_getbyindex: |
155 | ; in:eax-index, out: esi-filename, ecx-length |
155 | ; in:eax-index, out: esi-filename, ecx-length |
156 | mov esi,[pl_ptr] |
156 | mov esi,[pl_ptr] |
157 | mov ecx,eax |
157 | mov ecx,eax |
158 | .loop: |
158 | .loop: |
159 | lodsw |
159 | lodsw |
160 | and eax,not FL_MULSEL |
160 | and eax,not FL_MULSEL |
161 | jecxz .gbi |
161 | jecxz .gbi |
162 | add esi,eax |
162 | add esi,eax |
163 | dec ecx |
163 | dec ecx |
164 | jmp .loop |
164 | jmp .loop |
165 | .gbi: |
165 | .gbi: |
166 | movzx ecx,ax |
166 | movzx ecx,ax |
167 | ret |
167 | ret |
168 | 168 | ||
169 | PL_get1stsel: |
169 | PL_get1stsel: |
170 | ; out: esi- 1st selected, ebx - index |
170 | ; out: esi- 1st selected, ebx - index |
171 | mov esi,[pl_ptr] |
171 | mov esi,[pl_ptr] |
172 | xor ebx,ebx |
172 | xor ebx,ebx |
173 | PL_getnextsel: |
173 | PL_getnextsel: |
174 | push eax ecx |
174 | push eax ecx |
175 | movzx ecx,[list_count] |
175 | movzx ecx,[list_count] |
- | 176 | test ecx, ecx |
|
- | 177 | jz .ex2 |
|
176 | .lp: |
178 | .lp: |
177 | movzx eax,word[esi] |
179 | movzx eax,word[esi] |
178 | btr eax,15 |
180 | btr eax,15 |
179 | jc .ex2 |
181 | jc .ex2 |
180 | lea esi,[esi+eax+2] |
182 | lea esi,[esi+eax+2] |
181 | inc ebx |
183 | inc ebx |
182 | loop .lp |
184 | loop .lp |
183 | xor ebx,ebx |
185 | xor ebx,ebx |
184 | .ex2: |
186 | .ex2: |
185 | pop ecx |
187 | pop ecx |
186 | .ex: |
188 | .ex: |
187 | pop eax |
189 | pop eax |
188 | ret |
190 | ret |
189 | 191 | ||
190 | PL_clearsel: |
192 | PL_clearsel: |
191 | pusha |
193 | pusha |
192 | mov ebx,not FL_MULSEL |
194 | mov ebx,not FL_MULSEL |
193 | xor eax,eax |
195 | xor eax,eax |
194 | mov esi,[pl_ptr] |
196 | mov esi,[pl_ptr] |
195 | movzx ecx,[list_count] |
197 | movzx ecx,[list_count] |
196 | jecxz .flg |
198 | jecxz .flg |
197 | .loop: |
199 | .loop: |
198 | and word[esi],bx |
200 | and word[esi],bx |
199 | lodsw |
201 | lodsw |
200 | add esi,eax |
202 | add esi,eax |
201 | loop .loop |
203 | loop .loop |
202 | .flg: |
204 | .flg: |
203 | and [flag],not FL_MULSEL |
205 | and [flag],not FL_MULSEL |
204 | popa |
206 | popa |
205 | ret |
207 | ret |
206 | 208 | ||
207 | PL_shiftsel: |
209 | PL_shiftsel: |
208 | pusha |
210 | pusha |
209 | xor eax,eax |
211 | xor eax,eax |
210 | ; mov esi,[pl_ptr] |
212 | ; mov esi,[pl_ptr] |
211 | ; movzx ecx,[list_count] |
213 | ; movzx ecx,[list_count] |
212 | .loop: |
214 | .loop: |
213 | lodsw |
215 | lodsw |
214 | or word[esi-2],FL_MULSEL |
216 | or word[esi-2],FL_MULSEL |
215 | add esi,eax |
217 | add esi,eax |
216 | loop .loop |
218 | loop .loop |
217 | jmp PL_clearsel.flg |
219 | jmp PL_clearsel.flg |
218 | 220 | ||
219 | PL_invsel: |
221 | PL_invsel: |
220 | pusha |
222 | pusha |
221 | mov ebx,not FL_MULSEL |
223 | mov ebx,not FL_MULSEL |
222 | xor eax,eax |
224 | xor eax,eax |
223 | mov esi,[pl_ptr] |
225 | mov esi,[pl_ptr] |
224 | movzx ecx,[list_count] |
226 | movzx ecx,[list_count] |
225 | jecxz .ex |
227 | jecxz .ex |
226 | .loop: |
228 | .loop: |
227 | xor word[esi],FL_MULSEL |
229 | xor word[esi],FL_MULSEL |
228 | lodsw |
230 | lodsw |
229 | and eax,ebx |
231 | and eax,ebx |
230 | add esi,eax |
232 | add esi,eax |
231 | loop .loop |
233 | loop .loop |
232 | .ex: |
234 | .ex: |
233 | jmp PL_clearsel.flg |
235 | jmp PL_clearsel.flg |
234 | 236 | ||
235 | PL_load: |
237 | PL_load: |
236 | and [list_count],0 |
238 | and [list_count],0 |
237 | mov [pl_ptr],playlist |
239 | mov [pl_ptr],playlist |
238 | mov ebx,PL_info |
240 | mov ebx,PL_info |
239 | mov dword[ebx+16],playlist |
241 | mov dword[ebx+16],playlist |
240 | and dword[ebx],0 |
242 | and dword[ebx],0 |
241 | mov dword[ebx+12],20*512 |
243 | mov dword[ebx+12],20*512 |
242 | mov eax,70 |
244 | mov eax,70 |
243 | mcall |
245 | mcall |
244 | test eax,eax |
246 | test eax,eax |
245 | jz .ok1 ; ebx- filesize |
247 | jz .ok1 ; ebx- filesize |
246 | cmp eax,6 |
248 | cmp eax,6 |
247 | jne .ex |
249 | jne .ex |
248 | .ok1: |
250 | .ok1: |
249 | mov eax,0x0a0d |
251 | mov eax,0x0a0d |
250 | cmp word[playlist],ax |
252 | cmp word[playlist],ax |
251 | je .ok |
253 | je .ok |
252 | sub [pl_ptr],2 |
254 | sub [pl_ptr],2 |
253 | .ok: |
255 | .ok: |
254 | mov edi,[pl_ptr] |
256 | mov edi,[pl_ptr] |
255 | add ebx,edi |
257 | add ebx,edi |
256 | mov word[ebx],ax |
258 | mov word[ebx],ax |
257 | add edi,2 |
259 | add edi,2 |
258 | .loo: |
260 | .loo: |
259 | mov edx,edi |
261 | mov edx,edi |
260 | .loo2: |
262 | .loo2: |
261 | mov ecx,256 |
263 | mov ecx,256 |
262 | repne scasb |
264 | repne scasb |
263 | cmp edi,ebx |
265 | cmp edi,ebx |
264 | jb .ok2 |
266 | jb .ok2 |
265 | lea edi,[ebx+1] |
267 | lea edi,[ebx+1] |
266 | .ok2: |
268 | .ok2: |
267 | mov ecx,edi |
269 | mov ecx,edi |
268 | sub ecx,edx |
270 | sub ecx,edx |
269 | dec ecx |
271 | dec ecx |
270 | inc edi |
272 | inc edi |
271 | jecxz .shift |
273 | jecxz .shift |
272 | mov [edx-2],cx |
274 | mov [edx-2],cx |
273 | inc [list_count] |
275 | inc [list_count] |
274 | cmp edi,ebx |
276 | cmp edi,ebx |
275 | jb .loo |
277 | jb .loo |
276 | .ex1: |
278 | .ex1: |
277 | sub ebx,2 |
279 | sub ebx,2 |
278 | mov [play_limit],ebx |
280 | mov [play_limit],ebx |
279 | .ex: |
281 | .ex: |
280 | ret |
282 | ret |
281 | 283 | ||
282 | .shift: |
284 | .shift: |
283 | mov ecx,ebx |
285 | mov ecx,ebx |
284 | sub ecx,edi |
286 | sub ecx,edi |
285 | jecxz .ex1 |
287 | jecxz .ex1 |
286 | sub ebx,2 |
288 | sub ebx,2 |
287 | mov esi,edi |
289 | mov esi,edi |
288 | sub edi,2 |
290 | sub edi,2 |
289 | push edi |
291 | push edi |
290 | rep movsb |
292 | rep movsb |
291 | pop edi |
293 | pop edi |
292 | jmp .loo |
294 | jmp .loo |
293 | 295 | ||
294 | PL_save: |
296 | PL_save: |
295 | movzx ecx,byte[list_count] |
297 | movzx ecx,byte[list_count] |
296 | jecxz .ex |
298 | jecxz .ex |
297 | mov eax,0x0a0d |
299 | mov eax,0x0a0d |
298 | mov edi,[pl_ptr] |
300 | mov edi,[pl_ptr] |
299 | lea edx,[edi+2] |
301 | lea edx,[edi+2] |
300 | mov [PL_info+16],edx |
302 | mov [PL_info+16],edx |
301 | .savl: |
303 | .savl: |
302 | movzx ebx,word[edi] |
304 | movzx ebx,word[edi] |
303 | and bx,not FL_MULSEL |
305 | and bx,not FL_MULSEL |
304 | stosw |
306 | stosw |
305 | add edi,ebx |
307 | add edi,ebx |
306 | loop .savl |
308 | loop .savl |
307 | stosw |
309 | stosw |
308 | sub edi,[pl_ptr] |
310 | sub edi,[pl_ptr] |
309 | mov ebx,PL_info |
311 | mov ebx,PL_info |
310 | mov [ebx+12],edi |
312 | mov [ebx+12],edi |
311 | mov byte[ebx],2 |
313 | mov byte[ebx],2 |
312 | mov eax,70 |
314 | mov eax,70 |
313 | mcall |
315 | mcall |
314 | .ex: |
316 | .ex: |
315 | ret |
317 | ret |
316 | 318 | ||
317 | PL_swap: ; swap [ebx] with [ebx+1] |
319 | PL_swap: ; swap [ebx] with [ebx+1] |
318 | mov eax,ebx |
320 | mov eax,ebx |
319 | call PL_getbyindex |
321 | call PL_getbyindex |
320 | add ecx,2 |
322 | add ecx,2 |
321 | sub esi,2 |
323 | sub esi,2 |
322 | push ecx esi ; save begin & length of 1st fname |
324 | push ecx esi ; save begin & length of 1st fname |
323 | mov edi,fnbuf |
325 | mov edi,fnbuf |
324 | rep movsb |
326 | rep movsb |
325 | movzx ecx,word[esi] |
327 | movzx ecx,word[esi] |
326 | and cx,not FL_MULSEL |
328 | and cx,not FL_MULSEL |
327 | add ecx,2 |
329 | add ecx,2 |
328 | pop edi |
330 | pop edi |
329 | rep movsb |
331 | rep movsb |
330 | pop ecx |
332 | pop ecx |
331 | mov esi,fnbuf |
333 | mov esi,fnbuf |
332 | rep movsb |
334 | rep movsb |
333 | cmp ebx,[play_num] |
335 | cmp ebx,[play_num] |
334 | jne .nosel1 |
336 | jne .nosel1 |
335 | inc [play_num] |
337 | inc [play_num] |
336 | ret |
338 | ret |
337 | .nosel1: |
339 | .nosel1: |
338 | inc ebx |
340 | inc ebx |
339 | cmp ebx,[play_num] |
341 | cmp ebx,[play_num] |
340 | jne .nosel2 |
342 | jne .nosel2 |
341 | dec [play_num] |
343 | dec [play_num] |
342 | .nosel2: |
344 | .nosel2: |
343 | ret |
345 | ret |
344 | 346 | ||
345 | PL_info: |
347 | PL_info: |
346 | .mode dd 0 |
348 | .mode dd 0 |
347 | dd 0 |
349 | dd 0 |
348 | dd 0 |
350 | dd 0 |
349 | .bytes dd 20*512 |
351 | .bytes dd 20*512 |
350 | dd 0 |
352 | dd 0 |
351 | db PLAYLIST_PATH,010,(WND_HEIGHT-20)>275,12> |
353 | db PLAYLIST_PATH,010,(WND_HEIGHT-20)>275,12> |