Subversion Repositories Kolibri OS

Rev

Rev 4221 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4221 Rev 4243
Line 16... Line 16...
16
 
16
 
17
__DEBUG__       = 1
17
__DEBUG__       = 1
Line 18... Line 18...
18
__DEBUG_LEVEL__ = 1
18
__DEBUG_LEVEL__ = 1
-
 
19
 
-
 
20
format binary as ""
-
 
21
;--------------------------------------
-
 
22
frame_1:
-
 
23
  .x      = 5
-
 
24
  .y      = 10
-
 
25
  .width  = 350
19
 
26
  .height = 55
-
 
27
;--------------------------------------  
-
 
28
frame_2:
-
 
29
  .x      = 5
-
 
30
  .y      = 75
-
 
31
  .width  = 350
20
format binary as ""
32
  .height = 55
21
 
33
;---------------------------------------------------------------------
Line 22... Line 34...
22
use32
34
use32
23
        org     0x0
35
        org     0x0
24
 
36
 
25
        db      'MENUET01'      ; header
37
        db      'MENUET01'      ; header
26
        dd      0x01            ; header version
38
        dd      0x01            ; header version
27
        dd      START           ; entry point
39
        dd      START           ; entry point
28
        dd      IM_END          ; image size
40
        dd      IM_END          ; image size
29
        dd      I_END+0x1000    ; required memory
41
        dd      I_END           ; required memory
30
        dd      I_END+0x1000    ; esp
-
 
-
 
42
        dd      stacktop        ; esp
31
        dd      params          ; I_PARAM
43
        dd      params          ; I_PARAM
32
        dd      0x0             ; I_Path
44
        dd      0x0             ; I_Path
33
 
45
;---------------------------------------------------------------------
34
include '../../../../macros.inc'
46
include '../../../../macros.inc'
35
include '../../../../proc32.inc'
47
include '../../../../proc32.inc'
36
include '../../../../dll.inc'
48
include '../../../../dll.inc'
Line 37... Line 49...
37
include '../../../../debug-fdo.inc'
49
include '../../../../debug-fdo.inc'
38
include '../../box_lib/trunk/box_lib.mac'
50
include '../../box_lib/trunk/box_lib.mac'
39
include '../../http/http.inc'
51
include '../../http/http.inc'
40
 
-
 
-
 
52
 
41
virtual at 0
53
virtual at 0
Line 42... Line 54...
42
        http_msg http_msg
54
        http_msg http_msg
Line 43... Line 55...
43
end virtual
55
end virtual
44
 
56
;---------------------------------------------------------------------
45
START:
57
START:
46
 
58
 
-
 
59
        mcall   68, 11                  ; init heap so we can allocate memory dynamically
-
 
60
 
-
 
61
; load libraries
-
 
62
        stdcall dll.Load, @IMPORT
47
        mcall   68, 11                  ; init heap so we can allocate memory dynamically
63
        test    eax, eax
-
 
64
        jnz     exit
-
 
65
;---------------------------------------------------------------------
-
 
66
	mov	edi,filename_area
-
 
67
	mov	esi,start_temp_file_name
-
 
68
	call	copy_file_name_path
-
 
69
 
-
 
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
48
 
76
        call    [OpenDialog_Init]
49
; load libraries
77
 
50
        stdcall dll.Load, @IMPORT
78
; prepare for PathShow
Line 51... Line 79...
51
        test    eax, eax
79
        push    dword PathShow_data_1
Line 52... Line 80...
52
        jnz     exit
80
        call    [PathShow_prepare]
53
 
-
 
54
; check parameters
-
 
55
        cmp     byte[params], 0         ; no parameters ?
-
 
56
        je      reset_events            ; load the GUI
-
 
57
 
-
 
58
        inc     [silently]
-
 
59
 
-
 
60
download:
-
 
61
 
81
;---------------------------------------------------------------------
62
        DEBUGF  1, "Starting download\n"
-
 
63
 
-
 
64
        invoke  HTTP_get, params, 0
-
 
Line 65... Line 82...
65
        test    eax, eax
82
; check parameters
66
        jz      fail
83
        cmp     byte[params], 0         ; no parameters ?
Line 67... Line 84...
67
        mov     [identifier], eax
84
        je      reset_events            ; load the GUI
68
 
85
 
Line 69... Line 86...
69
  .loop:
86
        inc     [silently]
70
        invoke  HTTP_process, [identifier]
87
 
71
        test    eax, eax
88
download:
72
        jnz     .loop
-
 
-
 
89
	call	download_1
73
 
90
 
74
        test    [silently], 0xff
91
        test    [silently], 0xff
Line 75... Line 92...
75
        jnz     save
92
        jnz     save
76
 
93
 
Line 100... Line 117...
100
        
117
        
101
        cmp     eax, EV_MOUSE
118
        cmp     eax, EV_MOUSE
Line 102... Line 119...
102
        je      mouse
119
        je      mouse
103
 
-
 
-
 
120
 
104
        jmp     still
121
        jmp     still
105
 
122
;---------------------------------------------------------------------
Line 106... Line 123...
106
key:
123
key:
Line 107... Line 124...
107
        mcall   2       ; read key
124
        mcall   2       ; read key
108
 
125
 
Line 109... Line 126...
109
        stdcall [edit_box_key], dword edit1
126
        stdcall [edit_box_key], dword edit1
110
 
-
 
-
 
127
 
111
        cmp     ax, 13 shl 8
128
        cmp     ax, 13 shl 8
Line 112... Line 129...
112
        je      download
129
        je      download
Line 113... Line 130...
113
        
130
        
114
        jmp     still
131
        jmp     still
-
 
132
;---------------------------------------------------------------------        
-
 
133
button:
-
 
134
 
-
 
135
        mcall   17      ; get id
115
        
136
 
-
 
137
        cmp     ah, 26
-
 
138
        jne     @f
-
 
139
; invoke OpenDialog
-
 
140
        push    dword OpenDialog_data
-
 
141
        call    [OpenDialog_Start]
116
button:
142
        cmp     [OpenDialog_data.status],1
117
 
143
        jne     still
118
        mcall   17      ; get id
144
 
119
 
145
; prepare for PathShow
Line -... Line 146...
-
 
146
        push    dword PathShow_data_1
120
        cmp     ah, 26
147
        call    [PathShow_prepare]
121
        jne     @f
-
 
-
 
148
        call    draw_window
122
        call    save
149
        jmp     still
123
        jmp     still
150
@@:
124
  @@:
151
        cmp     ah, 1   ; button id=1 ?
125
        cmp     ah, 1   ; button id=1 ?
-
 
-
 
152
        je      exit
126
        je      exit
153
 
127
 
154
	call	download_1
128
        jmp     download
155
        jmp     save
129
 
156
;---------------------------------------------------------------------
130
mouse:
157
mouse:
131
        stdcall [edit_box_mouse], edit1
158
        stdcall [edit_box_mouse], edit1
-
 
159
        jmp     still
-
 
160
;---------------------------------------------------------------------
-
 
161
exit:
Line -... Line 162...
-
 
162
        DEBUGF  1, "Exiting\n"
-
 
163
        invoke  HTTP_free, [identifier] ; free buffer
-
 
164
fail:
-
 
165
        or      eax, -1 ; close this program
Line -... Line 166...
-
 
166
        mcall
-
 
167
;---------------------------------------------------------------------
-
 
168
download_1:
-
 
169
        DEBUGF  1, "Starting download\n"
-
 
170
 
-
 
171
        invoke  HTTP_get, params, 0
132
        jmp     still
172
        test    eax, eax
133
 
173
        jz      fail
134
exit:
174
        mov     [identifier], eax
135
        DEBUGF  1, "Exiting\n"
175
 
136
        invoke  HTTP_free, [identifier] ; free buffer
176
  .loop:
137
fail:
177
        invoke  HTTP_process, [identifier]
138
        or      eax, -1 ; close this program
178
        test    eax, eax
139
        mcall
179
        jnz     .loop
Line -... Line 180...
-
 
180
	ret
-
 
181
;---------------------------------------------------------------------
140
 
182
save:
141
 
183
        mov     ebp, [identifier]
Line 142... Line 184...
142
save:
184
        mov     eax, [ebp + http_msg.content_received]
143
        mov     ebp, [identifier]
185
        mov     [final_size], eax
144
        mov     eax, [ebp + http_msg.content_received]
186
        lea     ebx, [ebp + http_msg.data]
Line 145... Line 187...
145
        mov     [final_size], eax
187
        add     ebx, [ebp + http_msg.header_length]
-
 
188
        mov     [final_buffer], ebx
-
 
189
        mcall   70, fileinfo
-
 
190
 
-
 
191
        DEBUGF  1, "File saved\n"
146
        lea     ebx, [ebp + http_msg.data]
192
 
-
 
193
        test    [silently], 0xff
-
 
194
        jnz     exit
-
 
195
 
-
 
196
        mov     ecx, [sc.work_text]
-
 
197
        or      ecx, 0x80000000
-
 
198
        mcall   4, <10, frame_2.y+frame_2.height+7>, , download_complete
147
        add     ebx, [ebp + http_msg.header_length]
199
 
148
        mov     [final_buffer], ebx
200
        jmp     still
149
        mcall   70, fileinfo
201
;---------------------------------------------------------------------
Line 150... Line 202...
150
 
202
copy_file_name_path:
Line 151... Line 203...
151
        test    [silently], 0xff
203
	xor	eax,eax
152
        jnz     exit
-
 
-
 
204
	cld
153
 
205
@@:
154
        mov     ecx, [sc.work_text]
206
	lodsb
155
        or      ecx, 0x80000000
-
 
-
 
207
	stosb
156
        mcall   4, <10, 93>, , download_complete
208
	test	eax,eax
157
 
209
	jnz	@r
158
        jmp     still
210
	ret
159
 
211
;---------------------------------------------------------------------
-
 
212
;   *********************************************
-
 
213
;   *******  WINDOW DEFINITIONS AND DRAW ********
-
 
214
;   *********************************************
-
 
215
 
-
 
216
draw_window:
-
 
217
 
-
 
218
        mcall   12, 1   ; start window draw
-
 
219
;-----------------------------------
-
 
220
; get system colors
160
;   *********************************************
221
        mcall   48, 3, sc, 40
-
 
222
;-----------------------------------
-
 
223
; draw window
-
 
224
        mov     edx, [sc.work]
-
 
225
        or      edx, 0x34000000
-
 
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
161
;   *******  WINDOW DEFINITIONS AND DRAW ********
232
	mov	eax,[sc.work]
162
;   *********************************************
233
	mov	[frame_data.font_backgr_color],eax
163
 
234
	mov	eax,[sc.work_text]
164
draw_window:
235
	mov	[frame_data.font_color],eax
165
 
-
 
-
 
236
	
166
        mcall   12, 1   ; start window draw
237
	push	dword frame_data
167
 
238
	call	[Frame_draw]
168
; get system colors
239
;-----------------------------------
169
        mcall   48, 3, sc, 40
-
 
-
 
240
	mov	[frame_data.x],dword frame_2.x shl 16+frame_2.width
170
 
241
	mov	[frame_data.y],dword frame_2.y shl 16+frame_2.height
171
; draw window
242
	mov	[frame_data.text_pointer],dword select_path_text
172
        mov     edx, [sc.work]
243
 
173
        or      edx, 0x34000000
-
 
Line -... Line 244...
-
 
244
	push	dword frame_data
-
 
245
	call	[Frame_draw]
174
        mcall   0, <50, 370>, <350, 140>, , 0, title
246
;-----------------------------------
175
 
247
; draw "url:" text
176
; draw "url:" text
248
        mov     ecx, [sc.work_text]
-
 
249
        or      ecx, 80000000h
-
 
250
        mcall   4, , , type_pls
-
 
251
;-----------------------------------
-
 
252
; draw editbox
-
 
253
        edit_boxes_set_sys_color edit1, editboxes_end, sc
-
 
254
        stdcall [edit_box_draw], edit1
177
        mov     ecx, [sc.work_text]
255
;-----------------------------------
Line 178... Line 256...
178
        or      ecx, 80000000h
256
; draw buttons
Line 179... Line 257...
179
        mcall   4, <14, 14>, , type_pls
257
        mcall   8,,,22,[sc.work_button] ; reload
180
 
-
 
181
; draw editbox
-
 
182
        edit_boxes_set_sys_color edit1, editboxes_end, sc
258
        mcall   ,,, 24 ; stop
183
        stdcall [edit_box_draw], edit1
259
	
184
 
260
        mcall   , ,,26 ; save
185
; draw buttons
261
;-----------------------------------
186
        mcall   8, <90, 68>, <54, 16>, 22, [sc.work_button]     ; reload
262
; draw buttons text
Line 187... Line 263...
187
        mcall   , <166, 50>, <54, 16>, 24                       ; stop
263
        mov     ecx, [sc.work_button_text]
188
        mcall   , <224, 54>, , 26                               ; save
264
        or      ecx, 80000000h
-
 
265
        mcall   4, , , button_text.1
Line 189... Line 266...
189
 
266
        mcall   , , , button_text.2
190
; draw buttons text
267
        mcall   , , , button_text.3
191
        mov     ecx, [sc.work_button_text]
268
	
192
        or      ecx, 80000000h
269
        mcall   13,,,0xffffff
Line 193... Line 270...
193
        mcall   4, <102, 59>, , button_text
270
        push    dword PathShow_data_1
194
 
271
        call    [PathShow_draw]
195
        mcall   12, 2   ; end window redraw
272
	
196
 
273
        mcall   12, 2   ; end window redraw
-
 
274
 
-
 
275
        ret
-
 
276
;---------------------------------------------------------------------
197
        ret
277
; Data area
-
 
278
;-----------------------------------------------------------------------------
-
 
279
align   4
-
 
280
@IMPORT:
198
 
281
 
199
 
282
library lib_http,       'http.obj', \
200
;-----------------------------------------------------------------------------
283
        box_lib,        'box_lib.obj', \
201
; Data area
284
        proc_lib,       'proc_lib.obj'
-
 
285
 
202
;-----------------------------------------------------------------------------
286
import  lib_http, \
203
align   4
-
 
204
@IMPORT:
287
        HTTP_get                , 'get' , \
Line 205... Line 288...
205
 
288
        HTTP_process            , 'process'     ,\
206
library lib_http,       'http.obj', \
289
        HTTP_free               , 'free'
207
        box_lib,        'box_lib.obj'
290
 
Line 208... Line 291...
208
 
291
import  box_lib, \
Line 209... Line 292...
209
import  lib_http, \
292
        edit_box_draw,    'edit_box', \
Line 210... Line 293...
210
        HTTP_get                , 'get' , \
293
        edit_box_key,     'edit_box_key', \
Line 211... Line 294...
211
        HTTP_process            , 'process'     ,\
294
        edit_box_mouse,   'edit_box_mouse', \
-
 
295
        PathShow_prepare, 'PathShow_prepare', \
212
        HTTP_free               , 'free'
296
        PathShow_draw,    'PathShow_draw', \
-
 
297
        Frame_draw,       'frame_draw'
-
 
298
 
213
 
299
import  proc_lib, \
214
import  box_lib, \
300
        OpenDialog_Init,  'OpenDialog_init', \
215
        edit_box_draw,  'edit_box', \
301
        OpenDialog_Start, 'OpenDialog_start'
Line 216... Line 302...
216
        edit_box_key,   'edit_box_key', \
302
;---------------------------------------------------------------------
-
 
303
fileinfo        dd 2, 0, 0
-
 
304
final_size      dd 0
-
 
305
final_buffer    dd 0
-
 
306
                db 0
-
 
307
                dd fname_buf
-
 
308
;---------------------------------------------------------------------
-
 
309
 
-
 
310
mouse_dd        dd 0
-
 
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
-
 
312
editboxes_end:
-
 
313
 
-
 
314
;---------------------------------------------------------------------
-
 
315
 
-
 
316
include_debug_strings
-
 
317
 
-
 
318
;---------------------------------------------------------------------
-
 
319
 
-
 
320
type_pls        db 'URL:', 0
-
 
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
-
 
326
title           db 'HTTP Downloader', 0
-
 
327
silently        db 0
-
 
328
 
-
 
329
;---------------------------------------------------------------------
-
 
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
217
        edit_box_mouse, 'edit_box_mouse'
377
.filter_area            dd Filter
218
 
378
.x:
219
;---------------------------------------------------------------------
379
.x_size                 dw 420 ;+48 ; Window X size
220
fileinfo        dd 2, 0, 0
380
.x_start                dw 200 ;+50 ; Window X position
221
final_size      dd 0
381
.y:
222
final_buffer    dd 0
382
.y_size                 dw 320 ;+52 ; Window y size
223
                db '/rd/1/.download', 0
383
.y_start                dw 120 ;+54 ; Window Y position
224
        
384
 
225
;---------------------------------------------------------------------
385
communication_area_name:
226
 
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:
227
mouse_dd        dd 0
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
;---------------------------------------------------------------------
-
 
404
document_user   db 'http://'
228
edit1           edit_box 295, 48, 10, 0xffffff, 0xff, 0x80ff, 0, 0x8000, URLMAXLEN, document_user, mouse_dd, ed_focus+ed_always_focus, 7, 7
405
;---------------------------------------------------------------------
229
editboxes_end:
-
 
-
 
406
IM_END: