Rev 5540 | Rev 6773 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5540 | Rev 5543 | ||
---|---|---|---|
Line 48... | Line 48... | ||
48 | mcall 68, 11 ; init heap so we can allocate memory dynamically |
48 | mcall 68, 11 ; init heap so we can allocate memory dynamically |
Line 49... | Line 49... | ||
49 | 49 | ||
50 | ; load libraries |
50 | ; load libraries |
51 | stdcall dll.Load, @IMPORT |
51 | stdcall dll.Load, @IMPORT |
52 | test eax, eax |
52 | test eax, eax |
Line 53... | Line 53... | ||
53 | jnz exit |
53 | jnz mainloop.exit |
54 | 54 | ||
Line 55... | Line 55... | ||
55 | ; wanted events |
55 | ; wanted events |
Line 96... | Line 96... | ||
96 | jmp mainloop |
96 | jmp mainloop |
Line 97... | Line 97... | ||
97 | 97 | ||
98 | .button: |
98 | .button: |
99 | mcall 17 ; get id |
99 | mcall 17 ; get id |
100 | cmp ah, 1 ; button id=1 ? |
100 | cmp ah, 1 ; button id=1 ? |
Line 101... | Line 101... | ||
101 | je exit |
101 | je .exit |
102 | 102 | ||
Line 103... | Line 103... | ||
103 | cmp [btn_text], sz_download |
103 | cmp [btn_text], sz_download |
104 | je download |
104 | je download |
Line -... | Line 105... | ||
- | 105 | ||
- | 106 | cmp [btn_text], sz_open |
|
- | 107 | je open_file |
|
105 | 108 | ||
106 | cmp [btn_text], sz_open |
109 | .exit: |
107 | je open_file |
110 | mcall -1 ; exit |
Line -... | Line 111... | ||
- | 111 | ||
108 | 112 | .mouse: |
|
109 | .mouse: |
113 | invoke edit_box_mouse, edit1 |
110 | invoke edit_box_mouse, edit1 |
114 | jmp mainloop |
Line 111... | Line -... | ||
111 | jmp mainloop |
- | |
112 | - | ||
113 | open_file: |
- | |
Line 114... | Line 115... | ||
114 | ; mcall 70, ... |
115 | |
115 | jmp mainloop |
- | |
116 | 116 | ||
117 | exit: |
117 | open_file: |
118 | error: |
118 | mcall 70, fileopen |
119 | mcall -1 ; exit |
119 | jmp mainloop |
120 | 120 | ||
Line 147... | Line 147... | ||
147 | ; invoke OpenDialog |
147 | ; invoke OpenDialog |
148 | invoke OpenDialog_Start, OpenDialog_data |
148 | invoke OpenDialog_Start, OpenDialog_data |
149 | mcall 40, EVM_REDRAW + EVM_BUTTON + EVM_STACK |
149 | mcall 40, EVM_REDRAW + EVM_BUTTON + EVM_STACK |
150 | call draw_window |
150 | call draw_window |
Line 151... | Line 151... | ||
151 | 151 | ||
152 | ; Create the file |
152 | ; Create the local file |
153 | mov [fileinfo], 2 ; create/write to file |
153 | mov [fileinfo], 2 ; create/write to file |
154 | xor eax, eax |
154 | xor eax, eax |
155 | mov [fileinfo.offset], eax |
155 | mov [fileinfo.offset], eax |
156 | mov [fileinfo.offset+4], eax |
156 | mov [fileinfo.offset+4], eax |
157 | mov [fileinfo.size], eax |
157 | mov [fileinfo.size], eax |
158 | mcall 70, fileinfo |
158 | mcall 70, fileinfo |
159 | test eax, eax |
159 | test eax, eax |
Line 160... | Line 160... | ||
160 | jnz error ; TODO: print error message |
160 | jnz create_error |
161 | 161 | ||
162 | ; And start the download |
162 | ; Start the download |
163 | invoke HTTP_get, url, 0, FLAG_STREAM or FLAG_REUSE_BUFFER, 0 |
163 | invoke HTTP_get, url, 0, FLAG_STREAM or FLAG_REUSE_BUFFER, 0 |
- | 164 | test eax, eax |
|
164 | test eax, eax |
165 | jz get_error |
165 | jz error ; TODO: print error message |
166 | |
166 | mov [identifier], eax |
167 | mov [identifier], eax |
167 | mov [offset], 0 |
- | |
- | 168 | mov [offset], 0 |
|
168 | mov [btn_text], sz_cancel |
169 | mov [btn_text], sz_cancel |
- | 170 | mov [status], sz_downloading |
|
- | 171 | or [edit1.flags], ed_figure_only |
|
- | 172 | and [edit1.flags], not ed_focus |
|
169 | 173 | push [sc.work] |
|
Line -... | Line 174... | ||
- | 174 | pop [edit1.color] |
|
- | 175 | call draw_window |
|
- | 176 | ||
- | 177 | jmp download_loop |
|
- | 178 | ||
- | 179 | get_error: |
|
- | 180 | mov [btn_text], sz_exit |
|
- | 181 | mov [status], sz_err_http |
|
- | 182 | jmp redraw |
|
- | 183 | ||
- | 184 | create_error: |
|
- | 185 | mov [btn_text], sz_exit |
|
170 | or [edit1.flags], ed_figure_only |
186 | mov [status], sz_err_create |
171 | call draw_window |
187 | jmp redraw |
172 | 188 | ||
173 | download_loop: |
189 | download_loop: |
174 | mcall 10 |
190 | mcall 10 |
175 | cmp eax, EV_REDRAW |
191 | cmp eax, EV_REDRAW |
Line 176... | Line 192... | ||
176 | je .redraw |
192 | je .redraw |
177 | cmp eax, EV_BUTTON |
193 | cmp eax, EV_BUTTON |
178 | je .button |
194 | je .button |
179 | - | ||
180 | invoke HTTP_receive, [identifier] |
- | |
181 | test eax, eax |
- | |
182 | jz save_chunk |
- | |
183 | - | ||
184 | mov eax, [identifier] |
- | |
185 | push [eax + http_msg.content_length] |
- | |
186 | pop [pb.max] |
- | |
187 | push [eax + http_msg.content_received] |
195 | |
Line 188... | Line 196... | ||
188 | pop [pb.value] |
196 | invoke HTTP_receive, [identifier] |
189 | 197 | test eax, eax |
|
190 | invoke progressbar_draw, pb |
198 | jz got_data |
Line 191... | Line 199... | ||
191 | jmp download_loop |
199 | jmp download_loop |
192 | 200 | ||
Line 193... | Line 201... | ||
193 | .redraw: |
201 | .redraw: |
194 | call draw_window |
202 | call draw_window |
195 | jmp download_loop |
203 | jmp download_loop |
196 | 204 | ||
- | 205 | .button: |
|
- | 206 | jmp http_free |
|
- | 207 | ||
- | 208 | got_data: |
|
- | 209 | mov ebp, [identifier] |
|
- | 210 | test [ebp + http_msg.flags], 0xffff0000 ; error? |
|
Line 197... | Line -... | ||
197 | .button: |
- | |
198 | jmp http_free |
- | |
199 | - | ||
200 | save_chunk: |
- | |
201 | mov ebp, [identifier] |
211 | jnz http_error |
- | 212 | ||
- | 213 | cmp [fileinfo], 3 ; Did we write before? |
|
- | 214 | je .write |
|
- | 215 | ||
202 | test [ebp + http_msg.flags], 0xffff0000 ; error? |
216 | test [ebp + http_msg.flags], FLAG_CONTENT_LENGTH |
203 | jnz http_free |
217 | jz .first_write |
- | 218 | ||
- | 219 | mov eax, [ebp + http_msg.content_length] |
|
Line -... | Line 220... | ||
- | 220 | mov [pb.max], eax |
|
- | 221 | ||
204 | 222 | DEBUGF 1, "new file size=%u\n", eax |
|
205 | cmp [fileinfo], 3 |
223 | mov [fileinfo], 4 ; set end of file |
206 | je @f |
224 | mov [fileinfo.offset], eax ; new file size |
207 | DEBUGF 1, "new file size=%u\n", [ebp + http_msg.content_length] |
225 | mcall 70, fileinfo |
- | 226 | test eax, eax |
|
208 | mov [fileinfo], 4 ; set end of file |
227 | jnz write_error |
209 | mov eax, [ebp + http_msg.content_length] |
228 | |
210 | mov [fileinfo.offset], eax ; new file size |
229 | |
211 | mcall 70, fileinfo |
230 | .first_write: |
212 | 231 | mov [fileinfo], 3 ; write to existing file |
|
213 | mov [fileinfo], 3 ; write to existing file |
232 | .write: |
214 | @@: |
233 | mov ecx, [ebp + http_msg.content_received] |
- | 234 | sub ecx, [offset] |
|
- | 235 | jz download_loop ; more then 0 data bytes? |
|
- | 236 | mov [fileinfo.size], ecx |
|
- | 237 | mov eax, [ebp + http_msg.content_ptr] |
|
Line 215... | Line 238... | ||
215 | mov ecx, [ebp + http_msg.content_received] |
238 | mov [fileinfo.buffer], eax |
216 | sub ecx, [offset] |
239 | mov ebx, [offset] |
- | 240 | mov [fileinfo.offset], ebx |
|
- | 241 | DEBUGF 1, "Writing to disk: size=%u offset=%u\n", ecx, ebx |
|
- | 242 | mcall 70, fileinfo |
|
Line 217... | Line 243... | ||
217 | mov [fileinfo.size], ecx |
243 | test eax, eax ; check error code |
218 | mov eax, [ebp + http_msg.content_ptr] |
244 | jnz write_error |
Line -... | Line 245... | ||
- | 245 | cmp ebx, ecx ; check if all bytes were written to disk |
|
- | 246 | jne write_error |
|
219 | mov [fileinfo.buffer], eax |
247 | |
- | 248 | mov eax, [ebp + http_msg.content_received] |
|
- | 249 | mov [offset], eax |
|
- | 250 | mov [pb.value], eax |
|
- | 251 | ||
- | 252 | invoke progressbar_draw, pb |
|
- | 253 | ||
- | 254 | test [ebp + http_msg.flags], FLAG_GOT_ALL_DATA |
|
- | 255 | jz download_loop |
|
- | 256 | ||
- | 257 | ; Download completed successfully |
|
- | 258 | mov [status], sz_complete |
|
- | 259 | mov [pb.progress_color], 0x0000c800 ; green |
|
- | 260 | mov [btn_text], sz_open |
|
- | 261 | jmp http_free |
|
Line 220... | Line 262... | ||
220 | mov ebx, [offset] |
262 | |
221 | mov [fileinfo.offset], ebx |
263 | write_error: |
222 | DEBUGF 1, "Writing to disk: size=%u offset=%u\n", ecx, ebx |
264 | mov [status], sz_err_full |
223 | mcall 70, fileinfo |
265 | mov [pb.progress_color], 0x00c80000 ; red |
Line 238... | Line 280... | ||
238 | mov ecx, [ebp + http_msg.content_ptr] |
280 | mov ecx, [ebp + http_msg.content_ptr] |
239 | test ecx, ecx |
281 | test ecx, ecx |
240 | jz @f |
282 | jz @f |
241 | mcall 68, 13 ; free the buffer |
283 | mcall 68, 13 ; free the buffer |
242 | @@: |
284 | @@: |
243 | - | ||
244 | invoke HTTP_free, [identifier] ; free headers and connection |
285 | invoke HTTP_free, [identifier] ; free headers and connection |
245 | - | ||
246 | mov [btn_text], sz_open |
- | |
247 | call draw_window |
- | |
248 | jmp mainloop |
286 | jmp redraw |
249 | - | ||
250 | - | ||
Line 251... | Line 287... | ||
251 | 287 | ||
252 | draw_window: |
288 | draw_window: |
Line 253... | Line 289... | ||
253 | mcall 12, 1 ; start window draw |
289 | mcall 12, 1 ; start window draw |
Line 259... | Line 295... | ||
259 | mov edx, [sc.work] |
295 | mov edx, [sc.work] |
260 | or edx, 0x34000000 |
296 | or edx, 0x34000000 |
261 | mcall 0, <50, 320>, <350, 110>, , 0, title |
297 | mcall 0, <50, 320>, <350, 110>, , 0, title |
Line 262... | Line 298... | ||
262 | 298 | ||
263 | ; draw button |
299 | ; draw button |
Line 264... | Line 300... | ||
264 | mcall 8, <229,75>, <60,16>, 22, [sc.work_button] ; download |
300 | mcall 8, <229,75>, <60,16>, 22, [sc.work_button] |
265 | 301 | ||
266 | ; draw button text |
302 | ; draw button text |
267 | mov ecx, [sc.work_button_text] |
303 | mov ecx, [sc.work_button_text] |
Line -... | Line 304... | ||
- | 304 | or ecx, 80000000h |
|
- | 305 | mcall 4, <240,65>, , [btn_text] |
|
- | 306 | ||
- | 307 | ; draw status text |
|
- | 308 | mov ecx, [sc.work_text] |
|
268 | or ecx, 80000000h |
309 | or ecx, 80000000h |
269 | mcall 4, <240,65>, , [btn_text] |
310 | mcall 4, <10,65>, , [status] |
270 | 311 | ||
Line 271... | Line 312... | ||
271 | ; draw editbox |
312 | ; draw editbox |
272 | edit_boxes_set_sys_color edit1, editboxes_end, sc |
313 | edit_boxes_set_sys_color edit1, editboxes_end, sc |
273 | invoke edit_box_draw, edit1 |
314 | invoke edit_box_draw, edit1 |
274 | 315 | ||
275 | cmp [identifier], 0 |
316 | cmp [identifier], 0 |
276 | je @f |
317 | je @f |
277 | ; draw progressbar |
- | |
278 | invoke progressbar_draw, pb |
- | |
Line 279... | Line 318... | ||
279 | @@: |
318 | ; draw progressbar |
280 | mcall 12, 2 ; end window draw |
- | |
281 | ret |
319 | invoke progressbar_draw, pb |
Line 282... | Line 320... | ||
282 | 320 | @@: |
|
283 | 321 | mcall 12, 2 ; end window draw |
|
284 | dont_draw: |
322 | |
Line 317... | Line 355... | ||
317 | .size dd 0 |
355 | .size dd 0 |
318 | .buffer dd 0 |
356 | .buffer dd 0 |
319 | db 0 |
357 | db 0 |
320 | dd fname_buf |
358 | dd fname_buf |
Line -... | Line 359... | ||
- | 359 | ||
- | 360 | fileopen dd 7 |
|
- | 361 | dd 0 ; flags |
|
- | 362 | dd fname_buf ; parameters |
|
- | 363 | dd 0 ; reserved |
|
- | 364 | dd 0 ; reserved |
|
- | 365 | db "/sys/@open", 0 ; path |
|
321 | 366 | ||
322 | edit1 edit_box 299, 5, 10, 0xffffff, 0x0000ff, 0x0080ff, 0x000000, 0x8000, URLMAXLEN, url, mouse_dd, ed_focus+ed_always_focus, 0, 0 |
367 | edit1 edit_box 299, 5, 10, 0xffffff, 0x0000ff, 0x0080ff, 0x000000, 0x8000, URLMAXLEN, url, mouse_dd, ed_focus+ed_always_focus, 0, 0 |
Line 323... | Line 368... | ||
323 | editboxes_end: |
368 | editboxes_end: |
324 | 369 | ||
- | 370 | identifier dd 0 |
|
325 | identifier dd 0 |
371 | btn_text dd sz_download |
326 | btn_text dd sz_download |
372 | status dd sz_null |
327 | sz_download db 'Download', 0 |
373 | sz_download db 'Download', 0 |
- | 374 | sz_cancel db ' Cancel ', 0 |
|
- | 375 | sz_open db ' Open ', 0 |
|
- | 376 | sz_exit db ' Exit ', 0 |
|
- | 377 | ||
- | 378 | sz_null db 0 |
|
- | 379 | sz_downloading db 'Downloading..', 0 |
|
- | 380 | sz_complete db 'Download completed', 0 |
|
- | 381 | sz_err_create db 'Could not create the local file!', 0 |
|
328 | sz_cancel db ' Cancel ', 0 |
382 | sz_err_full db 'Disk full!', 0 |
Line 329... | Line 383... | ||
329 | sz_open db ' Open ', 0 |
383 | sz_err_http db 'HTTP error!', 0 |
330 | title db 'HTTP Downloader', 0 |
384 | title db 'HTTP Downloader', 0 |
331 | 385 |