Rev 485 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 485 | Rev 539 | ||
---|---|---|---|
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ; ; |
2 | ; ; |
3 | ; Tiny MP3 Shoutcast Server v0.1 (vt) ; |
3 | ; Tiny MP3 Shoutcast Server v0.1 (vt) ; |
4 | ; ; |
4 | ; ; |
5 | ; Compile with FASM for Menuet ; |
5 | ; Compile with FASM for Menuet ; |
6 | ; ; |
6 | ; ; |
7 | ; Listening to port 8008 ; |
7 | ; Listening to port 8008 ; |
8 | ; Connect with eg: 192.168.1.22:8008 ; |
8 | ; Connect with eg: 192.168.1.22:8008 ; |
9 | ; ; |
9 | ; ; |
10 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
10 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
11 | 11 | ||
12 | version equ '0.3' |
12 | version equ '0.3' |
13 | 13 | ||
14 | use32 |
14 | use32 |
15 | org 0x0 |
15 | org 0x0 |
16 | db 'MENUET01' ; 8 byte id |
16 | db 'MENUET01' ; 8 byte id |
17 | dd 0x01 ; header version |
17 | dd 0x01 ; header version |
18 | dd START ; program start |
18 | dd START ; program start |
19 | dd I_END ; program image size |
19 | dd I_END ; program image size |
20 | dd 0x80000 ; memory usage |
20 | dd 0x80000 ; memory usage |
21 | dd 0x20000 ; stack |
21 | dd 0x20000 ; stack |
22 | dd 0,0 |
22 | dd 0,0 |
23 | 23 | ||
24 | include 'lang.inc' |
24 | include 'lang.inc' |
25 | include '..\..\..\macros.inc' |
25 | include '..\..\..\macros.inc' |
26 | 26 | ||
27 | ; 0x0+ program image |
27 | ; 0x0+ program image |
28 | ; 0x1ffff stack |
28 | ; 0x1ffff stack |
29 | ; 0x20000 work area for file read |
29 | ; 0x20000 work area for file read |
30 | ; 0x40000+ file send buffer ( 100 kb ) |
30 | ; 0x40000+ file send buffer ( 100 kb ) |
31 | 31 | ||
32 | 32 | ||
33 | START: ; start of execution |
33 | START: ; start of execution |
34 | 34 | ||
35 | mov [status],0 |
35 | mov [status],0 |
36 | call clear_input |
36 | call clear_input |
37 | call draw_window ; at first, draw the window |
37 | call draw_window ; at first, draw the window |
38 | 38 | ||
39 | still: |
39 | still: |
40 | 40 | ||
41 | mov eax,23 ; wait here for event |
41 | mov eax,23 ; wait here for event |
42 | mov ebx,2 |
42 | mov ebx,2 |
43 | mcall |
43 | mcall |
44 | 44 | ||
45 | call check_events |
45 | call check_events |
46 | 46 | ||
47 | call check_connection_status |
47 | call check_connection_status |
48 | 48 | ||
49 | cmp [status],4 |
49 | cmp [status],4 |
50 | je start_transmission |
50 | je start_transmission |
51 | 51 | ||
52 | jmp still |
52 | jmp still |
53 | 53 | ||
54 | 54 | ||
55 | check_events: |
55 | check_events: |
56 | 56 | ||
57 | cmp eax,1 ; redraw request ? |
57 | cmp eax,1 ; redraw request ? |
58 | jz red |
58 | jz red |
59 | cmp eax,2 ; key in buffer ? |
59 | cmp eax,2 ; key in buffer ? |
60 | jz key |
60 | jz key |
61 | cmp eax,3 ; button in buffer ? |
61 | cmp eax,3 ; button in buffer ? |
62 | jz button |
62 | jz button |
63 | 63 | ||
64 | ret |
64 | ret |
65 | 65 | ||
66 | red: ; redraw |
66 | red: ; redraw |
67 | call draw_window |
67 | call draw_window |
68 | ret |
68 | ret |
69 | 69 | ||
70 | key: |
70 | key: |
71 | mov eax,2 ; Just read it and ignore |
71 | mov eax,2 ; Just read it and ignore |
72 | mcall |
72 | mcall |
73 | ret |
73 | ret |
74 | 74 | ||
75 | button: ; button |
75 | button: ; button |
76 | 76 | ||
77 | mov eax,17 ; get id |
77 | mov eax,17 ; get id |
78 | mcall |
78 | mcall |
79 | 79 | ||
80 | cmp ah,1 ; close |
80 | cmp ah,1 ; close |
81 | jne no_close |
81 | jne no_close |
82 | mov eax,-1 |
82 | mov eax,-1 |
83 | mcall |
83 | mcall |
84 | no_close: |
84 | no_close: |
85 | 85 | ||
86 | cmp ah,2 ; button id=2 ? |
86 | cmp ah,2 ; button id=2 ? |
87 | jnz tst3 |
87 | jnz tst3 |
88 | ; open socket |
88 | ; open socket |
89 | mov eax,53 |
89 | mov eax,53 |
90 | mov ebx,5 |
90 | mov ebx,5 |
91 | mov ecx,8008 ; local port # - http |
91 | mov ecx,8008 ; local port # - http |
92 | mov edx,0 ; no remote port specified |
92 | mov edx,0 ; no remote port specified |
93 | mov esi,0 ; no remote ip specified |
93 | mov esi,0 ; no remote ip specified |
94 | mov edi,0 ; PASSIVE open |
94 | mov edi,0 ; PASSIVE open |
95 | mcall |
95 | mcall |
96 | mov [socket], eax |
96 | mov [socket], eax |
97 | mov [posy],1 |
97 | mov [posy],1 |
98 | mov [posx],0 |
98 | mov [posx],0 |
99 | mov [read_on],1 |
99 | mov [read_on],1 |
100 | call check_for_incoming_data |
100 | call check_for_incoming_data |
101 | call draw_window |
101 | call draw_window |
102 | ret |
102 | ret |
103 | tst3: |
103 | tst3: |
104 | 104 | ||
105 | cmp ah,4 |
105 | cmp ah,4 |
106 | je close_socket |
106 | je close_socket |
107 | cmp ah,6 |
107 | cmp ah,6 |
108 | je close_socket |
108 | je close_socket |
109 | jmp no_socket_close |
109 | jmp no_socket_close |
110 | close_socket: |
110 | close_socket: |
111 | mov edx,eax |
111 | mov edx,eax |
112 | ; Close socket |
112 | ; Close socket |
113 | mov eax, 53 |
113 | mov eax, 53 |
114 | mov ebx, 8 |
114 | mov ebx, 8 |
115 | mov ecx, [socket] |
115 | mov ecx, [socket] |
116 | mcall |
116 | mcall |
117 | mov esp,0x1fff0 |
117 | mov esp,0x1fff0 |
118 | cmp dh,6 |
118 | cmp dh,6 |
119 | je read_string |
119 | je read_string |
120 | jmp still |
120 | jmp still |
121 | no_socket_close: |
121 | no_socket_close: |
122 | 122 | ||
123 | cmp ah,9 |
123 | cmp ah,9 |
124 | jne no_bps_add |
124 | jne no_bps_add |
125 | add [bps],8*1000 |
125 | add [bps],8*1000 |
126 | call draw_window |
126 | call draw_window |
127 | ret |
127 | ret |
128 | no_bps_add: |
128 | no_bps_add: |
129 | 129 | ||
130 | cmp ah,8 |
130 | cmp ah,8 |
131 | jne no_bps_sub |
131 | jne no_bps_sub |
132 | sub [bps],8*1000 |
132 | sub [bps],8*1000 |
133 | call draw_window |
133 | call draw_window |
134 | ret |
134 | ret |
135 | no_bps_sub: |
135 | no_bps_sub: |
136 | 136 | ||
137 | 137 | ||
138 | ret |
138 | ret |
139 | 139 | ||
140 | 140 | ||
141 | clear_input: |
141 | clear_input: |
142 | 142 | ||
143 | mov edi,input_text |
143 | mov edi,input_text |
144 | mov eax,0 |
144 | mov eax,0 |
145 | mov ecx,60*40 |
145 | mov ecx,60*40 |
146 | cld |
146 | cld |
147 | rep stosb |
147 | rep stosb |
148 | 148 | ||
149 | ret |
149 | ret |
150 | 150 | ||
151 | 151 | ||
152 | read_string: |
152 | read_string: |
153 | 153 | ||
154 | mov [addr],dword filename |
154 | mov [addr],dword filename |
155 | mov [ya],dword 95 |
155 | mov [ya],dword 95 |
156 | 156 | ||
157 | mov edi,[addr] |
157 | mov edi,[addr] |
158 | mov eax,32 |
158 | mov eax,32 |
159 | mov ecx,30 |
159 | mov ecx,30 |
160 | cld |
160 | cld |
161 | rep stosb |
161 | rep stosb |
162 | 162 | ||
163 | call print_text |
163 | call print_text |
164 | 164 | ||
165 | mov edi,[addr] |
165 | mov edi,[addr] |
166 | 166 | ||
167 | f11: |
167 | f11: |
168 | mov eax,10 |
168 | mov eax,10 |
169 | mcall |
169 | mcall |
170 | cmp eax,2 |
170 | cmp eax,2 |
171 | jne read_done |
171 | jne read_done |
172 | mov eax,2 |
172 | mov eax,2 |
173 | mcall |
173 | mcall |
174 | shr eax,8 |
174 | shr eax,8 |
175 | cmp eax,13 |
175 | cmp eax,13 |
176 | je read_done |
176 | je read_done |
177 | cmp eax,8 |
177 | cmp eax,8 |
178 | jnz nobsl |
178 | jnz nobsl |
179 | cmp edi,[addr] |
179 | cmp edi,[addr] |
180 | jz f11 |
180 | jz f11 |
181 | sub edi,1 |
181 | sub edi,1 |
182 | mov [edi],byte 32 |
182 | mov [edi],byte 32 |
183 | call print_text |
183 | call print_text |
184 | jmp f11 |
184 | jmp f11 |
185 | nobsl: |
185 | nobsl: |
186 | cmp eax,dword 31 |
186 | cmp eax,dword 31 |
187 | jbe f11 |
187 | jbe f11 |
188 | cmp eax,dword 95 |
188 | cmp eax,dword 95 |
189 | jb keyok |
189 | jb keyok |
190 | sub eax,32 |
190 | sub eax,32 |
191 | keyok: |
191 | keyok: |
192 | mov [edi],al |
192 | mov [edi],al |
193 | 193 | ||
194 | call print_text |
194 | call print_text |
195 | 195 | ||
196 | add edi,1 |
196 | add edi,1 |
197 | mov esi,[addr] |
197 | mov esi,[addr] |
198 | add esi,30 |
198 | add esi,30 |
199 | cmp esi,edi |
199 | cmp esi,edi |
200 | jnz f11 |
200 | jnz f11 |
201 | 201 | ||
202 | read_done: |
202 | read_done: |
203 | 203 | ||
204 | mov ecx,40 |
204 | mov ecx,40 |
205 | mov eax,0 |
205 | mov eax,0 |
206 | cld |
206 | cld |
207 | rep movsb |
207 | rep movsb |
208 | 208 | ||
209 | call print_text |
209 | call print_text |
210 | 210 | ||
211 | jmp still |
211 | jmp still |
212 | 212 | ||
213 | 213 | ||
214 | print_text: |
214 | print_text: |
215 | 215 | ||
216 | pusha |
216 | pusha |
217 | 217 | ||
218 | mov eax,13 |
218 | mov eax,13 |
219 | mov ebx,56*65536+30*6 |
219 | mov ebx,56*65536+30*6 |
220 | mov ecx,[ya] |
220 | mov ecx,[ya] |
221 | shl ecx,16 |
221 | shl ecx,16 |
222 | mov cx,8 |
222 | mov cx,8 |
223 | mov edx,0xffffff |
223 | mov edx,0xffffff |
224 | mcall |
224 | mcall |
225 | 225 | ||
226 | mov eax,4 |
226 | mov eax,4 |
227 | mov edx,[addr] |
227 | mov edx,[addr] |
228 | mov ebx,56*65536 |
228 | mov ebx,56*65536 |
229 | add ebx,[ya] |
229 | add ebx,[ya] |
230 | mov ecx,0x000000 |
230 | mov ecx,0x000000 |
231 | mov esi,30 |
231 | mov esi,30 |
232 | mcall |
232 | mcall |
233 | 233 | ||
234 | popa |
234 | popa |
235 | ret |
235 | ret |
236 | 236 | ||
237 | 237 | ||
238 | wait_for dd 0x0 |
238 | wait_for dd 0x0 |
239 | 239 | ||
240 | transmission_start dd 0x0 |
240 | transmission_start dd 0x0 |
241 | sentbytes dd 0x0 |
241 | sentbytes dd 0x0 |
242 | 242 | ||
243 | start_transmission: |
243 | start_transmission: |
244 | 244 | ||
245 | call clear_input |
245 | call clear_input |
246 | 246 | ||
247 | mov eax,5 |
247 | mov eax,5 |
248 | mov ebx,50 |
248 | mov ebx,50 |
249 | mcall |
249 | mcall |
250 | 250 | ||
251 | call check_for_incoming_data |
251 | call check_for_incoming_data |
252 | call draw_window |
252 | call draw_window |
253 | 253 | ||
254 | call send_header |
254 | call send_header |
255 | 255 | ||
256 | mov [fileinfo+4],dword 0 ; start from beginning |
256 | mov [fileinfo+4],dword 0 ; start from beginning |
257 | mov [read_to],0x40000 |
257 | mov [read_to],0x40000 |
258 | mov [playpos],0x40000 |
258 | mov [playpos],0x40000 |
259 | 259 | ||
260 | mov ecx,1024 / 512 |
260 | mov ecx,1024 / 512 |
261 | 261 | ||
262 | new_buffer: |
262 | new_buffer: |
263 | 263 | ||
264 | mov eax,[read_to] |
264 | mov eax,[read_to] |
265 | mov ebx,1 |
265 | mov ebx,1 |
266 | call read_file |
266 | call read_file |
267 | 267 | ||
268 | loop new_buffer |
268 | loop new_buffer |
269 | 269 | ||
270 | 270 | ||
271 | newpart: |
271 | newpart: |
272 | 272 | ||
273 | call check_connection_status |
273 | call check_connection_status |
274 | call draw_window |
274 | call draw_window |
275 | 275 | ||
276 | mov eax,26 |
276 | mov eax,26 |
277 | mov ebx,9 |
277 | mov ebx,9 |
278 | mcall |
278 | mcall |
279 | mov [transmission_start],eax |
279 | mov [transmission_start],eax |
280 | mov [sentbytes],0 |
280 | mov [sentbytes],0 |
281 | 281 | ||
282 | newblock: |
282 | newblock: |
283 | 283 | ||
284 | mov eax,[read_to] |
284 | mov eax,[read_to] |
285 | mov ebx,2 |
285 | mov ebx,2 |
286 | call read_file |
286 | call read_file |
287 | 287 | ||
288 | wait_more: |
288 | wait_more: |
289 | 289 | ||
290 | mov eax,26 |
290 | mov eax,26 |
291 | mov ebx,9 |
291 | mov ebx,9 |
292 | mcall |
292 | mcall |
293 | 293 | ||
294 | cmp eax,[wait_for] |
294 | cmp eax,[wait_for] |
295 | jge nomw |
295 | jge nomw |
296 | 296 | ||
297 | mov eax,5 |
297 | mov eax,5 |
298 | mov ebx,1 |
298 | mov ebx,1 |
299 | mcall |
299 | mcall |
300 | 300 | ||
301 | jmp wait_more |
301 | jmp wait_more |
302 | 302 | ||
303 | nomw: |
303 | nomw: |
304 | 304 | ||
305 | add eax,2 |
305 | add eax,2 |
306 | mov [wait_for],eax |
306 | mov [wait_for],eax |
307 | 307 | ||
308 | mov eax,11 |
308 | mov eax,11 |
309 | mcall |
309 | mcall |
310 | call check_events |
310 | call check_events |
311 | 311 | ||
312 | mov eax,53 |
312 | mov eax,53 |
313 | mov ebx,255 |
313 | mov ebx,255 |
314 | mov ecx,103 |
314 | mov ecx,103 |
315 | mcall |
315 | mcall |
316 | 316 | ||
317 | cmp eax,0 |
317 | cmp eax,0 |
318 | jne wait_more |
318 | jne wait_more |
319 | 319 | ||
320 | ; write to socket |
320 | ; write to socket |
321 | mov eax,53 |
321 | mov eax,53 |
322 | mov ebx,7 |
322 | mov ebx,7 |
323 | mov ecx,[socket] |
323 | mov ecx,[socket] |
324 | mov edx,[playadd] |
324 | mov edx,[playadd] |
325 | mov esi,[playpos] |
325 | mov esi,[playpos] |
326 | mcall |
326 | mcall |
327 | 327 | ||
328 | add [sentbytes],edx |
328 | add [sentbytes],edx |
329 | 329 | ||
330 | mov esi,[playpos] |
330 | mov esi,[playpos] |
331 | add esi,[playadd] |
331 | add esi,[playadd] |
332 | mov edi,0x40000 |
332 | mov edi,0x40000 |
333 | mov ecx,110000 / 4 |
333 | mov ecx,110000 / 4 |
334 | cld |
334 | cld |
335 | rep movsd |
335 | rep movsd |
336 | 336 | ||
337 | mov eax,[playadd] |
337 | mov eax,[playadd] |
338 | sub [read_to],eax |
338 | sub [read_to],eax |
339 | 339 | ||
340 | call check_for_incoming_data |
340 | call check_for_incoming_data |
341 | call show_progress |
341 | call show_progress |
342 | call check_rate |
342 | call check_rate |
343 | 343 | ||
344 | mov eax, 53 |
344 | mov eax, 53 |
345 | mov ebx, 6 |
345 | mov ebx, 6 |
346 | mov ecx, [socket] |
346 | mov ecx, [socket] |
347 | mcall |
347 | mcall |
348 | cmp eax,4 |
348 | cmp eax,4 |
349 | jne end_stream |
349 | jne end_stream |
350 | 350 | ||
351 | cmp [read_to],0x40000 |
351 | cmp [read_to],0x40000 |
352 | jge newblock |
352 | jge newblock |
353 | 353 | ||
354 | end_stream: |
354 | end_stream: |
355 | 355 | ||
356 | ; Close socket |
356 | ; Close socket |
357 | 357 | ||
358 | mov eax, 53 |
358 | mov eax, 53 |
359 | mov ebx, 8 |
359 | mov ebx, 8 |
360 | mov ecx, [socket] |
360 | mov ecx, [socket] |
361 | mcall |
361 | mcall |
362 | 362 | ||
363 | mov eax,5 |
363 | mov eax,5 |
364 | mov ebx,5 |
364 | mov ebx,5 |
365 | mcall |
365 | mcall |
366 | 366 | ||
367 | ; Open socket |
367 | ; Open socket |
368 | 368 | ||
369 | mov eax,53 |
369 | mov eax,53 |
370 | mov ebx,5 |
370 | mov ebx,5 |
371 | mov ecx,8008 ; local port # - http |
371 | mov ecx,8008 ; local port # - http |
372 | mov edx,0 ; no remote port specified |
372 | mov edx,0 ; no remote port specified |
373 | mov esi,0 ; no remote ip specified |
373 | mov esi,0 ; no remote ip specified |
374 | mov edi,0 ; PASSIVE open |
374 | mov edi,0 ; PASSIVE open |
375 | mcall |
375 | mcall |
376 | mov [socket], eax |
376 | mov [socket], eax |
377 | mov [posy],1 |
377 | mov [posy],1 |
378 | mov [posx],0 |
378 | mov [posx],0 |
379 | mov [read_on],0 |
379 | mov [read_on],0 |
380 | 380 | ||
381 | call draw_window |
381 | call draw_window |
382 | 382 | ||
383 | jmp still |
383 | jmp still |
384 | 384 | ||
385 | 385 | ||
386 | check_rate: |
386 | check_rate: |
387 | 387 | ||
388 | pusha |
388 | pusha |
389 | 389 | ||
390 | mov eax,[bps] |
390 | mov eax,[bps] |
391 | xor edx,edx |
391 | xor edx,edx |
392 | mov ebx,8*100 |
392 | mov ebx,8*100 |
393 | div ebx |
393 | div ebx |
394 | shl eax,1 |
394 | shl eax,1 |
395 | mov [playadd],eax |
395 | mov [playadd],eax |
396 | 396 | ||
397 | mov eax,26 |
397 | mov eax,26 |
398 | mov ebx,9 |
398 | mov ebx,9 |
399 | mcall |
399 | mcall |
400 | 400 | ||
401 | sub eax,[transmission_start] |
401 | sub eax,[transmission_start] |
402 | shr eax,1 |
402 | shr eax,1 |
403 | 403 | ||
404 | imul eax,[playadd] |
404 | imul eax,[playadd] |
405 | 405 | ||
406 | mov edx,0x00dd00 |
406 | mov edx,0x00dd00 |
407 | 407 | ||
408 | cmp [sentbytes],eax |
408 | cmp [sentbytes],eax |
409 | jge sendok |
409 | jge sendok |
410 | 410 | ||
411 | sub eax,20000 |
411 | sub eax,20000 |
412 | cmp [sentbytes],eax ; a long buffer underrun correction |
412 | cmp [sentbytes],eax ; a long buffer underrun correction |
413 | jge no_buffer_overrun ; actually leads to overrun |
413 | jge no_buffer_overrun ; actually leads to overrun |
414 | mov [sentbytes],eax |
414 | mov [sentbytes],eax |
415 | no_buffer_overrun: |
415 | no_buffer_overrun: |
416 | 416 | ||
417 | add [playadd],150 |
417 | add [playadd],150 |
418 | mov edx,0xdd0000 |
418 | mov edx,0xdd0000 |
419 | 419 | ||
420 | sendok: |
420 | sendok: |
421 | 421 | ||
422 | mov eax,13 |
422 | mov eax,13 |
423 | mov ebx,320*65536+10 |
423 | mov ebx,320*65536+10 |
424 | mov ecx,105*65536+10 |
424 | mov ecx,105*65536+10 |
425 | mcall |
425 | mcall |
426 | 426 | ||
427 | mov eax,47 |
427 | mov eax,47 |
428 | mov ebx,4*65536 |
428 | mov ebx,4*65536 |
429 | mov ecx,[playadd] |
429 | mov ecx,[playadd] |
430 | mov edx,322*65536+106 |
430 | mov edx,322*65536+106 |
431 | mov esi,0x000000 |
431 | mov esi,0x000000 |
432 | ; mcall |
432 | ; mcall |
433 | 433 | ||
434 | popa |
434 | popa |
435 | 435 | ||
436 | ret |
436 | ret |
437 | 437 | ||
438 | 438 | ||
439 | show_progress: |
439 | show_progress: |
440 | 440 | ||
441 | pusha |
441 | pusha |
442 | 442 | ||
443 | mov eax,13 |
443 | mov eax,13 |
444 | mov ebx,236*65536+10*6 |
444 | mov ebx,236*65536+10*6 |
445 | mov ecx,107*65536+8 |
445 | mov ecx,107*65536+8 |
446 | mov edx,0xffffff |
446 | mov edx,0xffffff |
447 | mcall |
447 | mcall |
448 | 448 | ||
449 | mov ecx,[fileinfo+4] |
449 | mov ecx,[fileinfo+4] |
450 | imul ecx,512 |
450 | imul ecx,512 |
451 | 451 | ||
452 | mov eax,47 ; file read |
452 | mov eax,47 ; file read |
453 | mov ebx,9*65536 |
453 | mov ebx,9*65536 |
454 | mov edx,236*65536+107 |
454 | mov edx,236*65536+107 |
455 | mov esi,0x000000 |
455 | mov esi,0x000000 |
456 | mcall |
456 | mcall |
457 | 457 | ||
458 | popa |
458 | popa |
459 | ret |
459 | ret |
460 | 460 | ||
461 | 461 | ||
462 | playpos dd 0x100000 |
462 | playpos dd 0x100000 |
463 | playadd dd 256000 / 8 / 100 |
463 | playadd dd 256000 / 8 / 100 |
464 | 464 | ||
465 | 465 | ||
466 | send_header: |
466 | send_header: |
467 | 467 | ||
468 | pusha |
468 | pusha |
469 | 469 | ||
470 | mov [playpos],0x40000 |
470 | mov [playpos],0x40000 |
471 | 471 | ||
472 | mov esi,fileinfo+5*4 |
472 | mov esi,fileinfo+5*4 |
473 | mov edi,transname |
473 | mov edi,transname |
474 | mov ecx,30 |
474 | mov ecx,30 |
475 | cld |
475 | cld |
476 | rep movsb |
476 | rep movsb |
477 | 477 | ||
478 | mov eax, 53 |
478 | mov eax, 53 |
479 | mov ebx, 7 |
479 | mov ebx, 7 |
480 | mov ecx, [socket] |
480 | mov ecx, [socket] |
481 | mov edx, headere-headers |
481 | mov edx, headere-headers |
482 | mov esi, headers |
482 | mov esi, headers |
483 | mcall |
483 | mcall |
484 | 484 | ||
485 | popa |
485 | popa |
486 | ret |
486 | ret |
487 | 487 | ||
488 | 488 | ||
489 | read_file: |
489 | read_file: |
490 | 490 | ||
491 | cmp [read_to],0x40000+2000 |
491 | cmp [read_to],0x40000+2000 |
492 | jg cache_ok |
492 | jg cache_ok |
493 | mov [read_on],1 |
493 | mov [read_on],1 |
494 | cache_ok: |
494 | cache_ok: |
495 | 495 | ||
496 | cmp [read_to],0x40000+95500 |
496 | cmp [read_to],0x40000+95500 |
497 | jg no_read_1 |
497 | jg no_read_1 |
498 | 498 | ||
499 | mov [fileinfo+12],eax |
499 | mov [fileinfo+12],eax |
500 | mov [fileinfo+8],ebx |
500 | mov [fileinfo+8],ebx |
501 | 501 | ||
502 | mov eax,58 |
502 | mov eax,58 |
503 | mov ebx,fileinfo |
503 | mov ebx,fileinfo |
504 | mcall |
504 | mcall |
505 | 505 | ||
506 | cmp eax,0 |
506 | cmp eax,0 |
507 | jne no_read_1 |
507 | jne no_read_1 |
508 | 508 | ||
509 | mov eax,[fileinfo+8] |
509 | mov eax,[fileinfo+8] |
510 | add [fileinfo+4],eax |
510 | add [fileinfo+4],eax |
511 | 511 | ||
512 | add [read_to],512*2 |
512 | add [read_to],512*2 |
513 | 513 | ||
514 | ret |
514 | ret |
515 | 515 | ||
516 | no_read_1: |
516 | no_read_1: |
517 | 517 | ||
518 | mov [read_on],0 |
518 | mov [read_on],0 |
519 | 519 | ||
520 | ret |
520 | ret |
521 | 521 | ||
522 | 522 | ||
523 | 523 | ||
524 | check_for_incoming_data: |
524 | check_for_incoming_data: |
525 | 525 | ||
526 | pusha |
526 | pusha |
527 | 527 | ||
528 | mov eax, 53 |
528 | mov eax, 53 |
529 | mov ebx, 2 |
529 | mov ebx, 2 |
530 | mov ecx, [socket] |
530 | mov ecx, [socket] |
531 | mcall |
531 | mcall |
532 | 532 | ||
533 | cmp eax,0 |
533 | cmp eax,0 |
534 | je _ret_now |
534 | je _ret_now |
535 | 535 | ||
536 | new_data: |
536 | new_data: |
537 | 537 | ||
538 | mov eax, 53 |
538 | mov eax, 53 |
539 | mov ebx, 2 |
539 | mov ebx, 2 |
540 | mov ecx, [socket] |
540 | mov ecx, [socket] |
541 | mcall |
541 | mcall |
542 | 542 | ||
543 | cmp eax,0 |
543 | cmp eax,0 |
544 | je _ret |
544 | je _ret |
545 | 545 | ||
546 | mov eax,53 |
546 | mov eax,53 |
547 | mov ebx,3 |
547 | mov ebx,3 |
548 | mov ecx,[socket] |
548 | mov ecx,[socket] |
549 | mcall |
549 | mcall |
550 | 550 | ||
551 | cmp bl,10 |
551 | cmp bl,10 |
552 | jne no_lf |
552 | jne no_lf |
553 | inc [posy] |
553 | inc [posy] |
554 | mov [posx],0 |
554 | mov [posx],0 |
555 | jmp new_data |
555 | jmp new_data |
556 | no_lf: |
556 | no_lf: |
557 | 557 | ||
558 | cmp bl,20 |
558 | cmp bl,20 |
559 | jb new_data |
559 | jb new_data |
560 | 560 | ||
561 | inc [posx] |
561 | inc [posx] |
562 | cmp [posx],60 |
562 | cmp [posx],60 |
563 | jbe xok |
563 | jbe xok |
564 | inc [posy] |
564 | inc [posy] |
565 | mov [posx],0 |
565 | mov [posx],0 |
566 | xok: |
566 | xok: |
567 | 567 | ||
568 | cmp [posy],12 |
568 | cmp [posy],12 |
569 | jbe yok |
569 | jbe yok |
570 | mov [posy],1 |
570 | mov [posy],1 |
571 | yok: |
571 | yok: |
572 | 572 | ||
573 | mov eax,[posy] |
573 | mov eax,[posy] |
574 | imul eax,60 |
574 | imul eax,60 |
575 | add eax,[posx] |
575 | add eax,[posx] |
576 | 576 | ||
577 | mov [input_text+eax],bl |
577 | mov [input_text+eax],bl |
578 | 578 | ||
579 | jmp new_data |
579 | jmp new_data |
580 | 580 | ||
581 | _ret: |
581 | _ret: |
582 | 582 | ||
583 | ; call draw_window |
583 | ; call draw_window |
584 | 584 | ||
585 | _ret_now: |
585 | _ret_now: |
586 | 586 | ||
587 | popa |
587 | popa |
588 | ret |
588 | ret |
589 | 589 | ||
590 | 590 | ||
591 | 591 | ||
592 | check_connection_status: |
592 | check_connection_status: |
593 | 593 | ||
594 | pusha |
594 | pusha |
595 | 595 | ||
596 | mov eax, 53 |
596 | mov eax, 53 |
597 | mov ebx, 6 |
597 | mov ebx, 6 |
598 | mov ecx, [socket] |
598 | mov ecx, [socket] |
599 | mcall |
599 | mcall |
600 | 600 | ||
601 | cmp eax,[status] |
601 | cmp eax,[status] |
602 | je .ccs_ret |
602 | je .ccs_ret |
603 | mov [status],eax |
603 | mov [status],eax |
604 | add eax,48 |
604 | add eax,48 |
605 | mov [text+20],al |
605 | mov [text+20],al |
606 | call draw_window |
606 | call draw_window |
607 | .ccs_ret: |
607 | .ccs_ret: |
608 | 608 | ||
609 | popa |
609 | popa |
610 | ret |
610 | ret |
611 | 611 | ||
612 | 612 | ||
613 | 613 | ||
614 | 614 | ||
615 | ; ********************************************* |
615 | ; ********************************************* |
616 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
616 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
617 | ; ********************************************* |
617 | ; ********************************************* |
618 | 618 | ||
619 | 619 | ||
620 | draw_window: |
620 | draw_window: |
621 | 621 | ||
622 | pusha |
622 | pusha |
623 | 623 | ||
624 | mov eax,12 ; function 12:tell os about windowdraw |
624 | mov eax,12 ; function 12:tell os about windowdraw |
625 | mov ebx,1 ; 1, start of draw |
625 | mov ebx,1 ; 1, start of draw |
626 | mcall |
626 | mcall |
627 | 627 | ||
628 | mov eax,0 ; Draw Window |
628 | mov eax,0 ; Draw Window |
629 | mov ebx,50*65536+410 |
629 | mov ebx,50*65536+410 |
630 | mov ecx,100*65536+141 |
630 | mov ecx,100*65536+141 |
631 | mov edx,0x13ffffff |
631 | mov edx,0x13ffffff |
632 | mov edi,title |
632 | mov edi,title |
633 | mcall |
633 | mcall |
634 | 634 | ||
635 | mov eax,8 ; Start server |
635 | mov eax,8 ; Start server |
636 | mov ebx,(25)*65536+21 |
636 | mov ebx,(25)*65536+21 |
637 | mov ecx,57*65536+10 |
637 | mov ecx,57*65536+10 |
638 | mov edx,2 |
638 | mov edx,2 |
639 | mov esi,0x409040 |
639 | mov esi,0x409040 |
640 | mcall ; Stop server |
640 | mcall ; Stop server |
641 | ; mov eax,8 |
641 | ; mov eax,8 |
642 | mov ebx,(25)*65536+21 |
642 | mov ebx,(25)*65536+21 |
643 | mov ecx,69*65536+10 |
643 | mov ecx,69*65536+10 |
644 | mov edx,4 |
644 | mov edx,4 |
645 | mov esi,0x904040 |
645 | mov esi,0x904040 |
646 | mcall |
646 | mcall |
647 | 647 | ||
648 | mov esi,0x3366d0 |
648 | mov esi,0x3366d0 |
649 | 649 | ||
650 | ; mov eax,8 ; Enter filename |
650 | ; mov eax,8 ; Enter filename |
651 | mov ebx,(25)*65536+21 |
651 | mov ebx,(25)*65536+21 |
652 | mov ecx,93*65536+10 |
652 | mov ecx,93*65536+10 |
653 | mov edx,6 |
653 | mov edx,6 |
654 | mcall |
654 | mcall |
655 | ; mov eax,8 ; Decrease transfer rate |
655 | ; mov eax,8 ; Decrease transfer rate |
656 | mov ebx,(25)*65536+10 |
656 | mov ebx,(25)*65536+10 |
657 | mov ecx,105*65536+10 |
657 | mov ecx,105*65536+10 |
658 | ; mov edx,8 |
658 | ; mov edx,8 |
659 | mcall |
659 | mcall |
660 | ; mov eax,8 ; Increase transfer rate |
660 | ; mov eax,8 ; Increase transfer rate |
661 | mov ebx,(36)*65536+10 |
661 | mov ebx,(36)*65536+10 |
662 | mov ecx,105*65536+10 |
662 | mov ecx,105*65536+10 |
663 | mov edx,9 |
663 | mov edx,9 |
664 | mcall |
664 | mcall |
665 | 665 | ||
666 | mov ebx,10*65536+35 ; draw info text |
666 | mov ebx,10*65536+35 ; draw info text |
667 | mov ecx,0x00000000 |
667 | mov ecx,0x00000000 |
668 | mov edx,text |
668 | mov edx,text |
669 | mov esi,40 |
669 | mov esi,40 |
670 | newline: |
670 | newline: |
671 | mov eax,4 |
671 | mov eax,4 |
672 | mcall |
672 | mcall |
673 | add ebx,12 |
673 | add ebx,12 |
674 | add edx,40 |
674 | add edx,40 |
675 | cmp [edx],byte 'x' |
675 | cmp [edx],byte 'x' |
676 | jnz newline |
676 | jnz newline |
677 | 677 | ||
678 | mov eax,4 ; Filename |
678 | mov eax,4 ; Filename |
679 | mov ebx,56*65536+95 |
679 | mov ebx,56*65536+95 |
680 | mov ecx,0x000000 |
680 | mov ecx,0x000000 |
681 | mov edx,filename |
681 | mov edx,filename |
682 | mov esi,30 |
682 | mov esi,30 |
683 | mcall |
683 | mcall |
684 | 684 | ||
685 | mov eax,[bps] |
685 | mov eax,[bps] |
686 | xor edx,edx |
686 | xor edx,edx |
687 | mov ebx,1000 |
687 | mov ebx,1000 |
688 | div ebx |
688 | div ebx |
689 | mov ecx,eax |
689 | mov ecx,eax |
690 | 690 | ||
691 | mov eax,47 |
691 | mov eax,47 |
692 | mov ebx,3*65536 |
692 | mov ebx,3*65536 |
693 | mov edx,58*65536+107 |
693 | mov edx,58*65536+107 |
694 | mov esi,0x00000000 |
694 | mov esi,0x00000000 |
695 | mcall |
695 | mcall |
696 | 696 | ||
697 | mov [input_text+0],dword 'RECE' |
697 | mov [input_text+0],dword 'RECE' |
698 | mov [input_text+4],dword 'IVED' |
698 | mov [input_text+4],dword 'IVED' |
699 | mov [input_text+8],dword ': ' |
699 | mov [input_text+8],dword ': ' |
700 | 700 | ||
701 | mov ebx,230*65536+35 ; draw info text |
701 | mov ebx,230*65536+35 ; draw info text |
702 | mov ecx,0x00000000 |
702 | mov ecx,0x00000000 |
703 | mov edx,input_text |
703 | mov edx,input_text |
704 | mov esi,28 |
704 | mov esi,28 |
705 | mov edi,7 |
705 | mov edi,7 |
706 | newline2: |
706 | newline2: |
707 | mov eax,4 |
707 | mov eax,4 |
708 | mcall |
708 | mcall |
709 | add ebx,10 |
709 | add ebx,10 |
710 | add edx,60 |
710 | add edx,60 |
711 | dec edi |
711 | dec edi |
712 | jnz newline2 |
712 | jnz newline2 |
713 | 713 | ||
714 | mov eax,38 |
714 | mov eax,38 |
715 | mov ebx,210*65536+210 |
715 | mov ebx,210*65536+210 |
716 | mov ecx,22*65536+136 |
716 | mov ecx,22*65536+136 |
717 | mov edx,0x6699cc ; 002288 |
717 | mov edx,0x6699cc ; 002288 |
718 | mcall |
718 | mcall |
719 | 719 | ||
720 | mov eax,38 |
720 | mov eax,38 |
721 | mov ebx,211*65536+211 |
721 | mov ebx,211*65536+211 |
722 | mov ecx,22*65536+136 |
722 | mov ecx,22*65536+136 |
723 | mov edx,0x336699 ; 002288 |
723 | mov edx,0x336699 ; 002288 |
724 | mcall |
724 | mcall |
725 | 725 | ||
726 | mov eax,12 ; function 12:tell os about windowdraw |
726 | mov eax,12 ; function 12:tell os about windowdraw |
727 | mov ebx,2 ; 2, end of draw |
727 | mov ebx,2 ; 2, end of draw |
728 | mcall |
728 | mcall |
729 | 729 | ||
730 | popa |
730 | popa |
731 | 731 | ||
732 | ret |
732 | ret |
733 | 733 | ||
734 | 734 | ||
735 | 735 | ||
736 | ; DATA AREA |
736 | ; DATA AREA |
737 | 737 | ||
738 | text: |
738 | text: |
739 | db ' TCB status: 0 ' |
739 | db ' TCB status: 0 ' |
740 | db ' ' |
740 | db ' ' |
741 | db ' Activate - port 8008 ' |
741 | db ' Activate - port 8008 ' |
742 | db ' Stop server ' |
742 | db ' Stop server ' |
743 | db ' ' |
743 | db ' ' |
744 | db ' > ' |
744 | db ' > ' |
745 | db ' < > Kbps ' |
745 | db ' < > Kbps ' |
746 | db 'x'; <- END MARKER, DONT DELETE |
746 | db 'x'; <- END MARKER, DONT DELETE |
747 | 747 | ||
748 | headers: |
748 | headers: |
749 | 749 | ||
750 | db 'ICY 200 OK',13,10 |
750 | db 'ICY 200 OK',13,10 |
751 | db 'icy-notice1:This stream requires Winamp or xmms',13,10 |
751 | db 'icy-notice1:This stream requires Winamp or xmms',13,10 |
752 | db 'icy-url:http://www.menuetos.org',13,10 |
752 | db 'icy-url:http://www.menuetos.org',13,10 |
753 | db 'icy-pub: 1',13,10 |
753 | db 'icy-pub: 1',13,10 |
754 | db 'icy-name: Menuet Mp3 Shoutcast Radio ',version,' - ' |
754 | db 'icy-name: Menuet Mp3 Shoutcast Radio ',version,' - ' |
755 | transname: |
755 | transname: |
756 | db ' ',13,10,13,10 |
756 | db ' ',13,10,13,10 |
757 | 757 | ||
758 | headere: |
758 | headere: |
759 | 759 | ||
760 | title db 'MP3 shoutcast server ',version,0 |
760 | title db 'MP3 shoutcast server ',version,0 |
761 | 761 | ||
762 | socket dd 0 |
762 | socket dd 0 |
763 | status dd 0 |
763 | status dd 0 |
764 | 764 | ||
765 | posy dd 1 |
765 | posy dd 1 |
766 | posx dd 0 |
766 | posx dd 0 |
767 | 767 | ||
768 | read_on db 1 |
768 | read_on db 1 |
769 | read_to dd 0 |
769 | read_to dd 0 |
770 | 770 | ||
771 | addr dd 0 |
771 | addr dd 0 |
772 | ya dd 0 |
772 | ya dd 0 |
773 | 773 | ||
774 | bps dd 128*1000 |
774 | bps dd 128*1000 |
775 | 775 | ||
776 | fileinfo: dd 0,0,0,0,0x20000 |
776 | fileinfo: dd 0,0,0,0,0x20000 |
777 | filename: db '/RD/1/MENUET.MP3',0 |
777 | filename: db '/sys/MENUET.MP3',0 |
778 | times 50 db 0 |
778 | times 50 db 0 |
779 | 779 | ||
780 | input_text: |
780 | input_text: |
781 | 781 | ||
782 | I_END:->> |
782 | I_END:->> |