Subversion Repositories Kolibri OS

Rev

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: