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, |
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, |
258 | mcall , |
||
259 | |||
260 | mcall , |
||
261 | ;----------------------------------- |
||
4158 | hidnplayr | 262 | ; draw buttons text |
263 | mov ecx, [sc.work_button_text] |
||
264 | or ecx, 80000000h |
||
4243 | mario79 | 265 | mcall 4, |
266 | mcall , |
||
267 | mcall , |
||
268 | |||
269 | mcall 13, |
||
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 | ;---------------------------------------------------------------------350,>50,>10,> |
4158 | hidnplayr | 434 |