Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4158 hidnplayr 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                                 ;;
3
;; Copyright (C) KolibriOS team 2009-2013. All rights reserved.    ;;
4
;; Distributed under terms of the GNU General Public License       ;;
5
;;                                                                 ;;
6
;;  downloader.asm - HTTP client for KolibriOS                     ;;
7
;;                                                                 ;;
8
;;                                                                 ;;
9
;;          GNU GENERAL PUBLIC LICENSE                             ;;
10
;;             Version 2, June 1991                                ;;
11
;;                                                                 ;;
12
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
13
 
14
URLMAXLEN       = 1024
15
BUFFERSIZE      = 4096
16
 
17
__DEBUG__       = 1
18
__DEBUG_LEVEL__ = 1
19
 
20
format binary as ""
4243 mario79 21
;--------------------------------------
22
frame_1:
23
  .x      = 5
24
  .y      = 10
25
  .width  = 350
26
  .height = 55
27
;--------------------------------------
28
frame_2:
29
  .x      = 5
30
  .y      = 75
31
  .width  = 350
32
  .height = 55
33
;---------------------------------------------------------------------
4158 hidnplayr 34
use32
35
        org     0x0
36
 
37
        db      'MENUET01'      ; header
38
        dd      0x01            ; header version
39
        dd      START           ; entry point
40
        dd      IM_END          ; image size
4243 mario79 41
        dd      I_END           ; required memory
42
        dd      stacktop        ; esp
4158 hidnplayr 43
        dd      params          ; I_PARAM
44
        dd      0x0             ; I_Path
4243 mario79 45
;---------------------------------------------------------------------
4160 hidnplayr 46
include '../../../../macros.inc'
47
include '../../../../proc32.inc'
48
include '../../../../dll.inc'
49
include '../../../../debug-fdo.inc'
50
include '../../box_lib/trunk/box_lib.mac'
51
include '../../http/http.inc'
4158 hidnplayr 52
 
53
virtual at 0
54
        http_msg http_msg
55
end virtual
4243 mario79 56
;---------------------------------------------------------------------
4158 hidnplayr 57
START:
58
 
59
        mcall   68, 11                  ; init heap so we can allocate memory dynamically
60
 
61
; load libraries
62
        stdcall dll.Load, @IMPORT
63
        test    eax, eax
64
        jnz     exit
4243 mario79 65
;---------------------------------------------------------------------
66
	mov	edi,filename_area
67
	mov	esi,start_temp_file_name
68
	call	copy_file_name_path
4158 hidnplayr 69
 
4243 mario79 70
	mov	edi,fname_buf
71
	mov	esi,start_file_path
72
	call	copy_file_name_path
73
 
74
;OpenDialog     initialisation
75
        push    dword OpenDialog_data
76
        call    [OpenDialog_Init]
77
 
78
; prepare for PathShow
79
        push    dword PathShow_data_1
80
        call    [PathShow_prepare]
81
;---------------------------------------------------------------------
4158 hidnplayr 82
; check parameters
83
        cmp     byte[params], 0         ; no parameters ?
84
        je      reset_events            ; load the GUI
85
 
4160 hidnplayr 86
        inc     [silently]
87
 
4158 hidnplayr 88
download:
4243 mario79 89
	call	download_1
4158 hidnplayr 90
 
4160 hidnplayr 91
        test    [silently], 0xff
92
        jnz     save
93
 
4158 hidnplayr 94
reset_events:
95
        DEBUGF  1, "resetting events\n"
96
 
97
; Report events
98
; defaults + mouse
99
        mcall   40,EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER
4243 mario79 100
;---------------------------------------------------------------------
4158 hidnplayr 101
redraw:
102
        call    draw_window
103
 
104
still:
105
;;        DEBUGF  1, "waiting for events\n"
106
 
107
        mcall   10      ; wait here for event
108
 
109
        cmp     eax, EV_REDRAW
110
        je      redraw
111
 
112
        cmp     eax, EV_KEY
113
        je      key
114
 
115
        cmp     eax, EV_BUTTON
116
        je      button
117
 
118
        cmp     eax, EV_MOUSE
119
        je      mouse
120
 
121
        jmp     still
4243 mario79 122
;---------------------------------------------------------------------
4158 hidnplayr 123
key:
124
        mcall   2       ; read key
125
 
126
        stdcall [edit_box_key], dword edit1
127
 
128
        cmp     ax, 13 shl 8
129
        je      download
130
 
131
        jmp     still
4243 mario79 132
;---------------------------------------------------------------------
4158 hidnplayr 133
button:
134
 
135
        mcall   17      ; get id
136
 
137
        cmp     ah, 26
138
        jne     @f
4243 mario79 139
; invoke OpenDialog
140
        push    dword OpenDialog_data
141
        call    [OpenDialog_Start]
142
        cmp     [OpenDialog_data.status],1
143
        jne     still
144
 
145
; prepare for PathShow
146
        push    dword PathShow_data_1
147
        call    [PathShow_prepare]
148
        call    draw_window
4158 hidnplayr 149
        jmp     still
4243 mario79 150
@@:
4158 hidnplayr 151
        cmp     ah, 1   ; button id=1 ?
152
        je      exit
153
 
4243 mario79 154
	call	download_1
155
        jmp     save
156
;---------------------------------------------------------------------
4158 hidnplayr 157
mouse:
158
        stdcall [edit_box_mouse], edit1
159
        jmp     still
4243 mario79 160
;---------------------------------------------------------------------
4158 hidnplayr 161
exit:
162
        DEBUGF  1, "Exiting\n"
4205 hidnplayr 163
        invoke  HTTP_free, [identifier] ; free buffer
4158 hidnplayr 164
fail:
165
        or      eax, -1 ; close this program
166
        mcall
4243 mario79 167
;---------------------------------------------------------------------
168
download_1:
169
        DEBUGF  1, "Starting download\n"
4158 hidnplayr 170
 
4243 mario79 171
        invoke  HTTP_get, params, 0
172
        test    eax, eax
173
        jz      fail
174
        mov     [identifier], eax
4158 hidnplayr 175
 
4243 mario79 176
  .loop:
177
        invoke  HTTP_process, [identifier]
178
        test    eax, eax
179
        jnz     .loop
180
	ret
181
;---------------------------------------------------------------------
4158 hidnplayr 182
save:
183
        mov     ebp, [identifier]
4220 hidnplayr 184
        mov     eax, [ebp + http_msg.content_received]
4158 hidnplayr 185
        mov     [final_size], eax
186
        lea     ebx, [ebp + http_msg.data]
187
        add     ebx, [ebp + http_msg.header_length]
188
        mov     [final_buffer], ebx
189
        mcall   70, fileinfo
190
 
4243 mario79 191
        DEBUGF  1, "File saved\n"
192
 
4160 hidnplayr 193
        test    [silently], 0xff
194
        jnz     exit
4158 hidnplayr 195
 
196
        mov     ecx, [sc.work_text]
197
        or      ecx, 0x80000000
4243 mario79 198
        mcall   4, <10, frame_2.y+frame_2.height+7>, , download_complete
4158 hidnplayr 199
 
4160 hidnplayr 200
        jmp     still
4243 mario79 201
;---------------------------------------------------------------------
202
copy_file_name_path:
203
	xor	eax,eax
204
	cld
205
@@:
206
	lodsb
207
	stosb
208
	test	eax,eax
209
	jnz	@r
210
	ret
211
;---------------------------------------------------------------------
4158 hidnplayr 212
;   *********************************************
213
;   *******  WINDOW DEFINITIONS AND DRAW ********
214
;   *********************************************
215
 
216
draw_window:
217
 
218
        mcall   12, 1   ; start window draw
4243 mario79 219
;-----------------------------------
4158 hidnplayr 220
; get system colors
221
        mcall   48, 3, sc, 40
4243 mario79 222
;-----------------------------------
4158 hidnplayr 223
; draw window
224
        mov     edx, [sc.work]
225
        or      edx, 0x34000000
4243 mario79 226
        mcall   0, <50, 370>, <350, 170>, , 0, title
227
;-----------------------------------
228
; draw frames
229
	mov	[frame_data.x],dword frame_1.x shl 16+frame_1.width
230
	mov	[frame_data.y],dword frame_1.y shl 16+frame_1.height
231
	mov	[frame_data.text_pointer],dword select_addr_text
232
	mov	eax,[sc.work]
233
	mov	[frame_data.font_backgr_color],eax
234
	mov	eax,[sc.work_text]
235
	mov	[frame_data.font_color],eax
236
 
237
	push	dword frame_data
238
	call	[Frame_draw]
239
;-----------------------------------
240
	mov	[frame_data.x],dword frame_2.x shl 16+frame_2.width
241
	mov	[frame_data.y],dword frame_2.y shl 16+frame_2.height
242
	mov	[frame_data.text_pointer],dword select_path_text
4158 hidnplayr 243
 
4243 mario79 244
	push	dword frame_data
245
	call	[Frame_draw]
246
;-----------------------------------
4158 hidnplayr 247
; draw "url:" text
248
        mov     ecx, [sc.work_text]
249
        or      ecx, 80000000h
4243 mario79 250
        mcall   4, , , type_pls
251
;-----------------------------------
4158 hidnplayr 252
; draw editbox
253
        edit_boxes_set_sys_color edit1, editboxes_end, sc
254
        stdcall [edit_box_draw], edit1
4243 mario79 255
;-----------------------------------
4158 hidnplayr 256
; draw buttons
4243 mario79 257
        mcall   8,,,22,[sc.work_button] ; reload
258
        mcall   ,,, 24 ; stop
259
 
260
        mcall   , ,,26 ; save
261
;-----------------------------------
4158 hidnplayr 262
; draw buttons text
263
        mov     ecx, [sc.work_button_text]
264
        or      ecx, 80000000h
4243 mario79 265
        mcall   4, , , button_text.1
266
        mcall   , , , button_text.2
267
        mcall   , , , button_text.3
268
 
269
        mcall   13,,,0xffffff
270
        push    dword PathShow_data_1
271
        call    [PathShow_draw]
272
 
4158 hidnplayr 273
        mcall   12, 2   ; end window redraw
274
 
275
        ret
4243 mario79 276
;---------------------------------------------------------------------
4158 hidnplayr 277
; Data area
278
;-----------------------------------------------------------------------------
279
align   4
280
@IMPORT:
281
 
282
library lib_http,       'http.obj', \
4243 mario79 283
        box_lib,        'box_lib.obj', \
284
        proc_lib,       'proc_lib.obj'
4158 hidnplayr 285
 
286
import  lib_http, \
287
        HTTP_get                , 'get' , \
4205 hidnplayr 288
        HTTP_process            , 'process'     ,\
289
        HTTP_free               , 'free'
4158 hidnplayr 290
 
291
import  box_lib, \
4243 mario79 292
        edit_box_draw,    'edit_box', \
293
        edit_box_key,     'edit_box_key', \
294
        edit_box_mouse,   'edit_box_mouse', \
295
        PathShow_prepare, 'PathShow_prepare', \
296
        PathShow_draw,    'PathShow_draw', \
297
        Frame_draw,       'frame_draw'
4158 hidnplayr 298
 
4243 mario79 299
import  proc_lib, \
300
        OpenDialog_Init,  'OpenDialog_init', \
301
        OpenDialog_Start, 'OpenDialog_start'
4158 hidnplayr 302
;---------------------------------------------------------------------
303
fileinfo        dd 2, 0, 0
304
final_size      dd 0
305
final_buffer    dd 0
4243 mario79 306
                db 0
307
                dd fname_buf
4158 hidnplayr 308
;---------------------------------------------------------------------
309
 
310
mouse_dd        dd 0
4243 mario79 311
edit1           edit_box 295, 48, (frame_1.y+10), 0xffffff, 0xff, 0x80ff, 0, 0x8000, URLMAXLEN, document_user, mouse_dd, ed_focus+ed_always_focus, 7, 7
4158 hidnplayr 312
editboxes_end:
313
 
314
;---------------------------------------------------------------------
315
 
316
include_debug_strings
317
 
318
;---------------------------------------------------------------------
319
 
320
type_pls        db 'URL:', 0
4243 mario79 321
button_text:
322
.1:             db 'DOWNLOAD',0
323
.2:             db 'STOP',0
324
.3:             db 'SELECT', 0
325
download_complete db 'FILE SAVED!', 0
4158 hidnplayr 326
title           db 'HTTP Downloader', 0
4160 hidnplayr 327
silently        db 0
4158 hidnplayr 328
 
329
;---------------------------------------------------------------------
4243 mario79 330
select_addr_text db ' NETWORK ADDRESS: ',0
331
select_path_text db ' PATH TO SAVE FILE: ',0
332
;---------------------------------------------------------------------
333
frame_data:
334
.type			dd 0 ;+0
335
.x:
336
.x_size			dw 0 ;+4
337
.x_start		dw 0 ;+6
338
.y:
339
.y_size			dw 0 ;+8
340
.y_start		dw 0 ;+10
341
.ext_fr_col		dd 0x0 ;+12
342
.int_fr_col		dd 0xffffff ;+16
343
.draw_text_flag		dd 1 ;+20
344
.text_pointer		dd 0 ;+24
345
.text_position		dd 0 ;+28
346
.font_number		dd 0 ;+32
347
.font_size_y		dd 9 ;+36
348
.font_color		dd 0x0 ;+40
349
.font_backgr_color	dd 0xffffff ;+44
350
;---------------------------------------------------------------------
351
PathShow_data_1:
352
.type                   dd 0    ;+0
353
.start_y                dw frame_2.y+14   ;+4
354
.start_x                dw frame_2.x+20   ;+6
355
.font_size_x            dw 6    ;+8     ; 6 - for font 0, 8 - for font 1
356
.area_size_x            dw frame_2.width-35  ;+10
357
.font_number            dd 0    ;+12    ; 0 - monospace, 1 - variable
358
.background_flag        dd 0    ;+16
359
.font_color             dd 0    ;+20
360
.background_color       dd 0    ;+24
361
.text_pointer           dd fname_buf    ;+28
362
.work_area_pointer      dd text_work_area       ;+32
363
.temp_text_length       dd 0    ;+36
364
;---------------------------------------------------------------------
365
OpenDialog_data:
366
.type                   dd 1    ; Save
367
.procinfo               dd procinfo     ;+4
368
.com_area_name          dd communication_area_name      ;+8
369
.com_area               dd 0    ;+12
370
.opendir_path           dd temp_dir_path        ;+16
371
.dir_default_path       dd communication_area_default_path      ;+20
372
.start_path             dd open_dialog_path     ;+24
373
.draw_window            dd draw_window  ;+28
374
.status                 dd 0    ;+32
375
.openfile_pach          dd fname_buf    ;+36
376
.filename_area          dd filename_area        ;+40
377
.filter_area            dd Filter
378
.x:
379
.x_size                 dw 420 ;+48 ; Window X size
380
.x_start                dw 200 ;+50 ; Window X position
381
.y:
382
.y_size                 dw 320 ;+52 ; Window y size
383
.y_start                dw 120 ;+54 ; Window Y position
384
 
385
communication_area_name:
386
        db 'FFFFFFFF_open_dialog',0
387
open_dialog_path:
388
    db '/sys/File Managers/opendial',0
389
communication_area_default_path:
390
        db '/sys',0
391
 
392
Filter:
393
dd      Filter.end - Filter
394
.1:
395
db      'IMG',0
396
db      'IMA',0
397
.end:
398
db      0
399
 
400
start_temp_file_name:   db 'some.garbage',0
401
 
402
start_file_path:  db '/sys/.download', 0
403
;---------------------------------------------------------------------
4158 hidnplayr 404
document_user   db 'http://'
405
;---------------------------------------------------------------------
406
IM_END:
407
;---------------------------------------------------------------------
408
params          rb URLMAXLEN
409
;---------------------------------------------------------------------
410
                sc system_colors
411
;---------------------------------------------------------------------
412
identifier      dd ?
413
;---------------------------------------------------------------------
4243 mario79 414
filename_area:
415
                rb 256
416
;---------------------------------------------------------------------
417
temp_dir_path:
418
                rb 4096
419
;---------------------------------------------------------------------
420
procinfo:
421
                rb 1024
422
;---------------------------------------------------------------------
423
fname_buf:
424
                rb 4096
425
;---------------------------------------------------------------------
426
text_work_area:
427
                rb 1024
428
;---------------------------------------------------------------------
429
                rb 4096
430
stacktop:
431
;---------------------------------------------------------------------
4158 hidnplayr 432
I_END:
4243 mario79 433
;---------------------------------------------------------------------
4158 hidnplayr 434