Subversion Repositories Kolibri OS

Rev

Rev 3545 | Rev 3549 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3545 Rev 3548
1
format binary as ""
1
format binary as ""
2
 
2
 
3
use32
3
use32
4
    org 0x0
4
    org 0x0
5
 
5
 
6
    db 'MENUET01'
6
    db 'MENUET01'
7
    dd 0x1
7
    dd 0x1
8
    dd START
8
    dd START
9
    dd I_END
9
    dd I_END
10
    dd IM_END
10
    dd IM_END
11
    dd IM_END
11
    dd IM_END
12
    dd 0, 0
12
    dd 0, 0
13
 
13
 
14
include '../proc32.inc'
14
include '../proc32.inc'
15
include '../macros.inc'
15
include '../macros.inc'
16
include '../libio.inc'
16
include '../libio.inc'
17
include '../dll.inc'
17
include '../dll.inc'
18
include '../../../../../programs/develop/libraries/box_lib/trunk/box_lib.mac'
18
include '../develop/libraries/box_lib/trunk/box_lib.mac'
19
 
19
 
20
include '../network.inc'
20
include '../network.inc'
21
 
21
 
22
 
22
 
23
filebuffer_size equ 4*4096 ; 16kb   (dont try to change it yet..)
23
filebuffer_size equ 4*4096 ; 16kb   (dont try to change it yet..)
24
TIMEOUT         equ 100
24
TIMEOUT         equ 100
25
buffer_len      equ 1500
25
buffer_len      equ 1500
26
 
26
 
27
AF_INET4        equ 2
27
AF_INET4        equ 2
28
IP_PROTO_UDP    equ 17
28
IP_PROTO_UDP    equ 17
29
 
29
 
30
opcode_rrq      equ 1
30
opcode_rrq      equ 1
31
opcode_wrq      equ 2
31
opcode_wrq      equ 2
32
opcode_data     equ 3
32
opcode_data     equ 3
33
opcode_ack      equ 4
33
opcode_ack      equ 4
34
opcode_error    equ 5
34
opcode_error    equ 5
35
 
35
 
36
; read/write request packet
36
; read/write request packet
37
;
37
;
38
;  2 bytes     string    1 byte     string   1 byte
38
;  2 bytes     string    1 byte     string   1 byte
39
;  ------------------------------------------------
39
;  ------------------------------------------------
40
; | Opcode |  Filename  |   0  |    Mode    |   0  |
40
; | Opcode |  Filename  |   0  |    Mode    |   0  |
41
;  ------------------------------------------------
41
;  ------------------------------------------------
42
 
42
 
43
; data packet
43
; data packet
44
;
44
;
45
;  2 bytes     2 bytes      n bytes
45
;  2 bytes     2 bytes      n bytes
46
;  ----------------------------------
46
;  ----------------------------------
47
; | Opcode |   Block #  |   Data     |
47
; | Opcode |   Block #  |   Data     |
48
;  ----------------------------------
48
;  ----------------------------------
49
 
49
 
50
; acknowledgement packet
50
; acknowledgement packet
51
;
51
;
52
;  2 bytes     2 bytes
52
;  2 bytes     2 bytes
53
;  ---------------------
53
;  ---------------------
54
; | Opcode |   Block #  |
54
; | Opcode |   Block #  |
55
;  ---------------------
55
;  ---------------------
56
 
56
 
57
; error packet
57
; error packet
58
;
58
;
59
;  2 bytes  2 bytes        string    1 byte
59
;  2 bytes  2 bytes        string    1 byte
60
;  ----------------------------------------
60
;  ----------------------------------------
61
; | Opcode |  ErrorCode |   ErrMsg   |   0  |
61
; | Opcode |  ErrorCode |   ErrMsg   |   0  |
62
;  ----------------------------------------
62
;  ----------------------------------------
63
 
63
 
64
 
64
 
65
START:
65
START:
66
 
66
 
67
        mcall   68, 11
67
        mcall   68, 11
68
 
68
 
69
        stdcall dll.Load, @IMPORT
69
        stdcall dll.Load, @IMPORT
70
        or      eax, eax
70
        or      eax, eax
71
        jnz     exit
71
        jnz     exit
72
 
72
 
73
stop_transfer:
73
stop_transfer:
74
        mcall   40, 00100111b
74
        mcall   40, 00100111b
75
 
75
 
76
red_win:
76
red_win:
77
        call draw_window
77
        call draw_window
78
 
78
 
79
align 4
79
align 4
80
still:
80
still:
81
        mcall   10
81
        mcall   10
82
 
82
 
83
        dec     eax
83
        dec     eax
84
        jz      red_win
84
        jz      red_win
85
 
85
 
86
        dec     eax
86
        dec     eax
87
        jz      key
87
        jz      key
88
 
88
 
89
        dec     eax
89
        dec     eax
90
        jz      button
90
        jz      button
91
 
91
 
92
        push    dword edit1
92
        push    dword edit1
93
        call    [edit_box_mouse]
93
        call    [edit_box_mouse]
94
 
94
 
95
        push    dword edit2
95
        push    dword edit2
96
        call    [edit_box_mouse]
96
        call    [edit_box_mouse]
97
 
97
 
98
        push    dword edit3
98
        push    dword edit3
99
        call    [edit_box_mouse]
99
        call    [edit_box_mouse]
100
 
100
 
101
        push    dword edit4
101
        push    dword edit4
102
        call    [edit_box_mouse]
102
        call    [edit_box_mouse]
103
 
103
 
104
        push    dword Option_boxs1
104
        push    dword Option_boxs1
105
        call    [option_box_mouse]
105
        call    [option_box_mouse]
106
 
106
 
107
        push    dword Option_boxs2
107
        push    dword Option_boxs2
108
        call    [option_box_mouse]
108
        call    [option_box_mouse]
109
 
109
 
110
        jmp     still
110
        jmp     still
111
 
111
 
112
button:
112
button:
113
        mcall   17
113
        mcall   17
114
 
114
 
115
        cmp     ah,0x10
115
        cmp     ah,0x10
116
        je      start_transfer
116
        je      start_transfer
117
 
117
 
118
 
118
 
119
        test    ah , ah
119
        test    ah , ah
120
        jz      still
120
        jz      still
121
 
121
 
122
exit:   mcall   -1
122
exit:   mcall   -1
123
key:
123
key:
124
        mcall   2
124
        mcall   2
125
 
125
 
126
        push    dword edit1
126
        push    dword edit1
127
        call    [edit_box_key]
127
        call    [edit_box_key]
128
 
128
 
129
        push    dword edit2
129
        push    dword edit2
130
        call    [edit_box_key]
130
        call    [edit_box_key]
131
 
131
 
132
        push    dword edit3
132
        push    dword edit3
133
        call    [edit_box_key]
133
        call    [edit_box_key]
134
 
134
 
135
        push    dword edit4
135
        push    dword edit4
136
        call    [edit_box_key]
136
        call    [edit_box_key]
137
 
137
 
138
        jmp still
138
        jmp still
139
 
139
 
140
 
140
 
141
align 4
141
align 4
142
draw_window:
142
draw_window:
143
        mcall   12,1
143
        mcall   12,1
144
        mcall   0, (50*65536+400), (30*65536+180), 0x34AABBCC, 0x085080DD, str_title
144
        mcall   0, (50*65536+400), (30*65536+180), 0x34AABBCC, 0x085080DD, str_title
145
 
145
 
146
        mcall   4, 35*65536+10, 0x80000000, str_server
146
        mcall   4, 35*65536+10, 0x80000000, str_server
147
 
147
 
148
        mov     ebx, 5*65536+30
148
        mov     ebx, 5*65536+30
149
        mov     edx, str_source
149
        mov     edx, str_source
150
        mcall
150
        mcall
151
 
151
 
152
        mov     ebx, 11*65536+50
152
        mov     ebx, 11*65536+50
153
        mov     edx, str_destination
153
        mov     edx, str_destination
154
        mcall
154
        mcall
155
 
155
 
156
        mov     ebx, 47*65536+72
156
        mov     ebx, 47*65536+72
157
        mov     edx, str_mode
157
        mov     edx, str_mode
158
        mcall
158
        mcall
159
 
159
 
160
        mov     ebx, 160*65536+72
160
        mov     ebx, 160*65536+72
161
        mov     edx, str_method
161
        mov     edx, str_method
162
        mcall
162
        mcall
163
 
163
 
164
        mov     ebx, 270*65536+72
164
        mov     ebx, 270*65536+72
165
        mov     edx, str_blocksize
165
        mov     edx, str_blocksize
166
        mcall
166
        mcall
167
 
167
 
168
        push    dword edit1
168
        push    dword edit1
169
        call    [edit_box_draw]
169
        call    [edit_box_draw]
170
 
170
 
171
        push    dword edit2
171
        push    dword edit2
172
        call    [edit_box_draw]
172
        call    [edit_box_draw]
173
 
173
 
174
        push    dword edit3
174
        push    dword edit3
175
        call    [edit_box_draw]
175
        call    [edit_box_draw]
176
 
176
 
177
        push    dword edit4
177
        push    dword edit4
178
        call    [edit_box_draw]
178
        call    [edit_box_draw]
179
 
179
 
180
        push    dword Option_boxs1
180
        push    dword Option_boxs1
181
        call    [option_box_draw]
181
        call    [option_box_draw]
182
 
182
 
183
        push    dword Option_boxs2
183
        push    dword Option_boxs2
184
        call    [option_box_draw]
184
        call    [option_box_draw]
185
 
185
 
186
        mcall   8,210*65536+170, 105*65536+16,0x00000010,0x085080DD
186
        mcall   8,210*65536+170, 105*65536+16,0x00000010,0x085080DD
187
 
187
 
188
        mcall   4,260*65536+110, 0x80000000, str_transfer
188
        mcall   4,260*65536+110, 0x80000000, str_transfer
189
 
189
 
190
        mcall   38,10*65536+380, 130*65536+130,0x00000000
190
        mcall   38,10*65536+380, 130*65536+130,0x00000000
191
 
191
 
192
        mcall   4,350*65536+137, 0x80000000, str_kb_s
192
        mcall   4,350*65536+137, 0x80000000, str_kb_s
193
 
193
 
194
        mcall   47,1 shl 31 + 7 shl 16 + 1,kbps,305*65536+137,0x00000000
194
        mcall   47,1 shl 31 + 7 shl 16 + 1,kbps,305*65536+137,0x00000000
195
 
195
 
196
        mcall   4,50*65536+137, 0x80000000, str_complete
196
        mcall   4,50*65536+137, 0x80000000, str_complete
197
 
197
 
198
        mcall   47,1 shl 31 + 3 shl 16 + 1,done,25*65536+137,0x00000000
198
        mcall   47,1 shl 31 + 3 shl 16 + 1,done,25*65536+137,0x00000000
199
 
199
 
200
        mcall   12,2
200
        mcall   12,2
201
 
201
 
202
        ret
202
        ret
203
 
203
 
204
 
204
 
205
 
205
 
206
 
206
 
207
 
207
 
208
start_transfer:
208
start_transfer:
209
 
209
 
210
        ; first, resolve the hostname
210
        ; first, resolve the hostname
211
 
211
 
212
        push    esp     ; reserve stack place
212
        push    esp     ; reserve stack place
213
 
213
 
214
        push    esp     ; fourth parameter
214
        push    esp     ; fourth parameter
215
        push    0       ; third parameter
215
        push    0       ; third parameter
216
        push    0       ; second parameter
216
        push    0       ; second parameter
217
        push    dword SRV     ; first parameter
217
        push    dword SRV     ; first parameter
218
        call    [getaddrinfo]
218
        call    [getaddrinfo]
219
 
219
 
220
        pop     esi
220
        pop     esi
221
 
221
 
222
; test for error
222
; test for error
223
        test    eax, eax
223
        test    eax, eax
224
        jnz     still
224
        jnz     still
225
 
225
 
226
        mov     esi, [esi]
226
        mov     esi, [esi]
227
        mov     esi, [esi + sockaddr_in.sin_addr]
227
        mov     esi, [esi + sockaddr_in.sin_addr]
228
        mov     dword [IP], esi
228
        mov     dword [IP], esi
229
 
229
 
230
        mcall   socket, AF_INET4, SOCK_DGRAM, 0                ; socket_open
230
        mcall   socket, AF_INET4, SOCK_DGRAM, 0                ; socket_open
231
        cmp     eax, -1
231
        cmp     eax, -1
232
        je      still
232
        je      still
233
 
233
 
234
        mov     [socketnum], eax
234
        mov     [socketnum], eax
235
 
235
 
236
        mcall   connect, [socketnum], sockaddr, sockaddr_len         ; socket_connect
236
        mcall   connect, [socketnum], sockaddr, sockaddr_len         ; socket_connect
237
        cmp     eax, -1
237
        cmp     eax, -1
238
        je      still
238
        je      still
239
 
239
 
240
        mov     word [I_END], opcode_rrq
240
        mov     word [I_END], opcode_rrq
241
        cmp     [option_group2],op3
241
        cmp     [option_group2],op3
242
        je      @f
242
        je      @f
243
        mov     word [I_END], opcode_wrq
243
        mov     word [I_END], opcode_wrq
244
      @@:
244
      @@:
245
 
245
 
246
        xor     al , al
246
        xor     al , al
247
        mov     edi, remote_addr
247
        mov     edi, remote_addr
248
        mov     ecx, 250
248
        mov     ecx, 250
249
        repnz   scasb
249
        repnz   scasb
250
        sub     edi, remote_addr-1
250
        sub     edi, remote_addr-1
251
        mov     ecx, edi
251
        mov     ecx, edi
252
        mov     edi, I_END+2
252
        mov     edi, I_END+2
253
        mov     esi, remote_addr
253
        mov     esi, remote_addr
254
        rep     movsb
254
        rep     movsb
255
 
255
 
256
        cmp     [option_group1], op1
256
        cmp     [option_group1], op1
257
        je      .ascii
257
        je      .ascii
258
 
258
 
259
        mov     esi, octet
259
        mov     esi, octet
260
        movsd
260
        movsd
261
        movsb
261
        movsb
262
 
262
 
263
        jmp     .send_request
263
        jmp     .send_request
264
 
264
 
265
      .ascii:
265
      .ascii:
266
 
266
 
267
        mov     esi, netascii
267
        mov     esi, netascii
268
        movsd
268
        movsd
269
        movsd
269
        movsd
270
 
270
 
271
      .send_request:
271
      .send_request:
272
 
272
 
273
        xor     al, al
273
        xor     al, al
274
        stosb
274
        stosb
275
 
275
 
276
        sub     edi, I_END
276
        sub     edi, I_END
277
        mov     esi, edi
277
        mov     esi, edi
278
        mcall   send, [socketnum], I_END
278
        mcall   send, [socketnum], I_END
279
 
279
 
280
        mcall   40, 10000101b
280
        mcall   40, 10000101b
281
 
281
 
282
        mov     [last_ack], 0
282
        mov     [last_ack], 0
283
 
283
 
284
 
284
 
285
 
285
 
286
 
286
 
287
 
287
 
288
 
288
 
289
receive_data_loop:
289
receive_data_loop:
290
 
290
 
291
        mcall   23, TIMEOUT
291
        mcall   23, TIMEOUT
292
 
292
 
293
        dec     eax
293
        dec     eax
294
        jz      .red
294
        jz      .red
295
 
295
 
296
        dec     eax
296
        dec     eax
297
        jz      .key
297
        jz      .key
298
 
298
 
299
 
299
 
300
        mcall   recv, [socketnum], buffer, buffer_len, 0  ; receive data
300
        mcall   recv, [socketnum], buffer, buffer_len, 0  ; receive data
301
 
301
 
302
        cmp     word[buffer], opcode_data
302
        cmp     word[buffer], opcode_data
303
        jne     .error
303
        jne     .error
304
 
304
 
305
        mov     bx, [last_ack]
305
        mov     bx, [last_ack]
306
        cmp     word [buffer + 2], bx
306
        cmp     word [buffer + 2], bx
307
        jne     .packet_got_lost
307
        jne     .packet_got_lost
308
        inc     [last_ack]
308
        inc     [last_ack]
309
 
309
 
310
        cmp     eax, 4+512
310
        cmp     eax, 4+512
311
        je      .continue
311
        je      .continue
312
 
312
 
313
; last packet, or something else
313
; last packet, or something else
314
.error:
314
.error:
315
 
315
 
316
.packet_got_lost:
316
.packet_got_lost:
317
 
317
 
318
 
318
 
319
 
319
 
320
.continue:
320
.continue:
321
 
321
 
322
        mov     word[buffer], opcode_ack                ; send ack
322
        mov     word[buffer], opcode_ack                ; send ack
323
        mcall   send, [socketnum], buffer, 4, 0
323
        mcall   send, [socketnum], buffer, 4, 0
324
 
324
 
325
        jmp     receive_data_loop
325
        jmp     receive_data_loop
326
 
326
 
327
.red:
327
.red:
328
 
328
 
329
        call    draw_window
329
        call    draw_window
330
 
330
 
331
        jmp     receive_data_loop
331
        jmp     receive_data_loop
332
 
332
 
333
 
333
 
334
.key:
334
.key:
335
        mcall   2
335
        mcall   2
336
        cmp     ah, 2
336
        cmp     ah, 2
337
        jz      exit
337
        jz      exit
338
 
338
 
339
        ; close socket ?
339
        ; close socket ?
340
 
340
 
341
        jmp     receive_data_loop
341
        jmp     receive_data_loop
342
 
342
 
343
 
343
 
344
 
344
 
345
 
345
 
346
 
346
 
347
 
347
 
348
;--------------------------------
348
;--------------------------------
349
 
349
 
350
 
350
 
351
send_:
351
send_:
352
 
352
 
353
        invoke  file_open, local_addr, O_READ
353
        invoke  file_open, local_addr, O_READ
354
        or      eax, eax
354
        or      eax, eax
355
        jz      .exit
355
        jz      .exit
356
        mov     [fh], eax
356
        mov     [fh], eax
357
 
357
 
358
        stdcall mem.Alloc, filebuffer_size
358
        stdcall mem.Alloc, filebuffer_size
359
        or      eax, eax
359
        or      eax, eax
360
        jz      .exit
360
        jz      .exit
361
        mov     [fb], eax
361
        mov     [fb], eax
362
 
362
 
363
        mov     [last_ack], 0
363
        mov     [last_ack], 0
364
        mov     [fo], 0
364
        mov     [fo], 0
365
 
365
 
366
.read_chunk:
366
.read_chunk:
367
 
367
 
368
        invoke  file_seek, [fh], [fo], SEEK_END
368
        invoke  file_seek, [fh], [fo], SEEK_END
369
        cmp     eax, -1
369
        cmp     eax, -1
370
        je      .exit
370
        je      .exit
371
        invoke  file_read, [fh], [fb], filebuffer_size
371
        invoke  file_read, [fh], [fb], filebuffer_size
372
        cmp     eax, -1
372
        cmp     eax, -1
373
        je      .exit
373
        je      .exit
374
        add     [fo], filebuffer_size
374
        add     [fo], filebuffer_size
375
        cmp     eax, filebuffer_size
375
        cmp     eax, filebuffer_size
376
        je      .packet
376
        je      .packet
377
 
377
 
378
        ; ijhidfhfdsndsfqk
378
        ; ijhidfhfdsndsfqk
379
 
379
 
380
.packet:
380
.packet:
381
 
381
 
382
        movzx   esi, [last_ack]
382
        movzx   esi, [last_ack]
383
        and     esi, 0x000000001f   ; last five bits    BUFFER SIZE MUST BE 16 kb for this to work !!!
383
        and     esi, 0x000000001f   ; last five bits    BUFFER SIZE MUST BE 16 kb for this to work !!!
384
        shl     esi, 9              ; = * 512
384
        shl     esi, 9              ; = * 512
385
        add     esi, [fb]
385
        add     esi, [fb]
386
        mov     edi, buffer
386
        mov     edi, buffer
387
        mov     ax, opcode_data
387
        mov     ax, opcode_data
388
        stosw
388
        stosw
389
        mov     ax, [last_ack]
389
        mov     ax, [last_ack]
390
        stosw
390
        stosw
391
        mov     ecx, 512/4
391
        mov     ecx, 512/4
392
        rep     movsd
392
        rep     movsd
393
 
393
 
394
        mcall   send, [socketnum], buffer, 4+512, 0       ; send data
394
        mcall   send, [socketnum], buffer, 4+512, 0       ; send data
395
 
395
 
396
 
396
 
397
.loop:
397
.loop:
398
 
398
 
399
        mcall   23, TIMEOUT
399
        mcall   23, TIMEOUT
400
 
400
 
401
        dec     eax
401
        dec     eax
402
        jz      .red
402
        jz      .red
403
 
403
 
404
        dec     eax
404
        dec     eax
405
        jz      .key
405
        jz      .key
406
 
406
 
407
        mcall   recv, [socketnum], buffer, buffer_len, 0  ; receive ack
407
        mcall   recv, [socketnum], buffer, buffer_len, 0  ; receive ack
408
 
408
 
409
        cmp     word[buffer], opcode_ack
409
        cmp     word[buffer], opcode_ack
410
        jne     .exit
410
        jne     .exit
411
 
411
 
412
        mov     ax, [last_ack]
412
        mov     ax, [last_ack]
413
        cmp     word[buffer+2], ax
413
        cmp     word[buffer+2], ax
414
        jne     .packet
414
        jne     .packet
415
        inc     [last_ack]
415
        inc     [last_ack]
416
        test    [last_ack],0x001f
416
        test    [last_ack],0x001f
417
        jz      .read_chunk
417
        jz      .read_chunk
418
        jmp     .packet
418
        jmp     .packet
419
 
419
 
420
 
420
 
421
.red:
421
.red:
422
 
422
 
423
        call    draw_window
423
        call    draw_window
424
 
424
 
425
        jmp     .loop
425
        jmp     .loop
426
 
426
 
427
 
427
 
428
.key:
428
.key:
429
        mcall   2
429
        mcall   2
430
        cmp     ah, 2
430
        cmp     ah, 2
431
        jz      exit
431
        jz      exit
432
 
432
 
433
        ; close socket ?
433
        ; close socket ?
434
 
434
 
435
        jmp     .loop
435
        jmp     .loop
436
 
436
 
437
.exit:
437
.exit:
438
        invoke  file_close, [fh]
438
        invoke  file_close, [fh]
439
        jmp     still
439
        jmp     still
440
 
440
 
441
 
441
 
442
 
442
 
443
 
443
 
444
 
444
 
445
;-------------------------
445
;-------------------------
446
; DATA
446
; DATA
447
 
447
 
448
socketnum      dd 0
448
socketnum      dd 0
449
kbps           dd 0
449
kbps           dd 0
450
done           dd 0
450
done           dd 0
451
 
451
 
452
sockaddr:
452
sockaddr:
453
        dw AF_INET4
453
        dw AF_INET4
454
        dw 0x4500       ; 69
454
        dw 0x4500       ; 69
455
IP      db 192,168,1,115
455
IP      db 192,168,1,115
456
sockaddr_len = $ - sockaddr
456
sockaddr_len = $ - sockaddr
457
 
457
 
458
align 16
458
align 16
459
@IMPORT:
459
@IMPORT:
460
 
460
 
461
library box_lib , 'box_lib.obj', \
461
library box_lib , 'box_lib.obj', \
462
        io_lib  , 'libio.obj', \
462
        io_lib  , 'libio.obj', \
463
        network , 'network.obj'
463
        network , 'network.obj'
464
 
464
 
465
import  box_lib                                 ,\
465
import  box_lib                                 ,\
466
        edit_box_draw    ,'edit_box'            ,\
466
        edit_box_draw    ,'edit_box'            ,\
467
        edit_box_key     ,'edit_box_key'        ,\
467
        edit_box_key     ,'edit_box_key'        ,\
468
        edit_box_mouse   ,'edit_box_mouse'      ,\
468
        edit_box_mouse   ,'edit_box_mouse'      ,\
469
        version_ed       ,'version_ed'          ,\
469
        version_ed       ,'version_ed'          ,\
470
        init_checkbox    ,'init_checkbox2'      ,\
470
        init_checkbox    ,'init_checkbox2'      ,\
471
        check_box_draw   ,'check_box_draw2'     ,\
471
        check_box_draw   ,'check_box_draw2'     ,\
472
        check_box_mouse  ,'check_box_mouse2'    ,\
472
        check_box_mouse  ,'check_box_mouse2'    ,\
473
        version_ch       ,'version_ch2'         ,\
473
        version_ch       ,'version_ch2'         ,\
474
        option_box_draw  ,'option_box_draw'     ,\
474
        option_box_draw  ,'option_box_draw'     ,\
475
        option_box_mouse ,'option_box_mouse'    ,\
475
        option_box_mouse ,'option_box_mouse'    ,\
476
        version_op       ,'version_op'
476
        version_op       ,'version_op'
477
 
477
 
478
import  io_lib                                  ,\
478
import  io_lib                                  ,\
479
        file_find_first , 'file_find_first'     ,\
479
        file_find_first , 'file_find_first'     ,\
480
        file_find_next  , 'file_find_next'      ,\
480
        file_find_next  , 'file_find_next'      ,\
481
        file_find_close , 'file_find_close'     ,\
481
        file_find_close , 'file_find_close'     ,\
482
        file_size       , 'file_size'           ,\
482
        file_size       , 'file_size'           ,\
483
        file_open       , 'file_open'           ,\
483
        file_open       , 'file_open'           ,\
484
        file_read       , 'file_read'           ,\
484
        file_read       , 'file_read'           ,\
485
        file_write      , 'file_write'          ,\
485
        file_write      , 'file_write'          ,\
486
        file_seek       , 'file_seek'           ,\
486
        file_seek       , 'file_seek'           ,\
487
        file_tell       , 'file_tell'           ,\
487
        file_tell       , 'file_tell'           ,\
488
        file_eof?       , 'file_iseof'          ,\
488
        file_eof?       , 'file_iseof'          ,\
489
        file_seteof     , 'file_seteof'         ,\
489
        file_seteof     , 'file_seteof'         ,\
490
        file_truncate   , 'file_truncate'       ,\
490
        file_truncate   , 'file_truncate'       ,\
491
        file_close      , 'file_close'
491
        file_close      , 'file_close'
492
 
492
 
493
import  network                                         ,\
493
import  network                                         ,\
494
        inet_ntoa               , 'inet_ntoa'           ,\
494
        inet_ntoa               , 'inet_ntoa'           ,\
495
        getaddrinfo             , 'getaddrinfo'         ,\
495
        getaddrinfo             , 'getaddrinfo'         ,\
496
        freeaddrinfo            , 'freeaddrinfo'
496
        freeaddrinfo            , 'freeaddrinfo'
497
 
497
 
498
 
498
 
499
edit1 edit_box 300,80,5 ,0xffffff,0x6f9480,0,0,0,99 ,SRV,mouse_dd,ed_focus,  11,11
499
edit1 edit_box 300,80,5 ,0xffffff,0x6f9480,0,0,0,99 ,SRV,mouse_dd,ed_focus,  11,11
500
edit2 edit_box 300,80,25,0xffffff,0x6a9480,0,0,0,99 ,remote_addr,mouse_dd,ed_figure_only, 5,5
500
edit2 edit_box 300,80,25,0xffffff,0x6a9480,0,0,0,99 ,remote_addr,mouse_dd,ed_figure_only, 5,5
501
edit3 edit_box 300,80,45,0xffffff,0x6a9480,0,0,0,99 ,local_addr,mouse_dd,ed_figure_only, 27,27
501
edit3 edit_box 300,80,45,0xffffff,0x6a9480,0,0,0,99 ,local_addr,mouse_dd,ed_figure_only, 27,27
502
edit4 edit_box 40,340,68,0xffffff,0x6a9480,0,0,0,5 ,BLK,mouse_dd,ed_figure_only, 3,3
502
edit4 edit_box 40,340,68,0xffffff,0x6a9480,0,0,0,5 ,BLK,mouse_dd,ed_figure_only, 3,3
503
 
503
 
504
op1 option_box option_group1,80,68,6,12,0xffffff,0,0,netascii,octet-netascii
504
op1 option_box option_group1,80,68,6,12,0xffffff,0,0,netascii,octet-netascii
505
op2 option_box option_group1,80,85,6,12,0xFFFFFF,0,0,octet,get-octet
505
op2 option_box option_group1,80,85,6,12,0xFFFFFF,0,0,octet,get-octet
506
 
506
 
507
op3 option_box option_group2,210,68,6,12,0xffffff,0,0,get,put-get
507
op3 option_box option_group2,210,68,6,12,0xffffff,0,0,get,put-get
508
op4 option_box option_group2,210,85,6,12,0xFFFFFF,0,0,put,BLK-put
508
op4 option_box option_group2,210,85,6,12,0xFFFFFF,0,0,put,BLK-put
509
 
509
 
510
option_group1   dd op1
510
option_group1   dd op1
511
option_group2   dd op3
511
option_group2   dd op3
512
Option_boxs1    dd op1,op2,0
512
Option_boxs1    dd op1,op2,0
513
Option_boxs2    dd op3,op4,0
513
Option_boxs2    dd op3,op4,0
514
 
514
 
515
str_title       db 'TFTP client for KolibriOS',0
515
str_title       db 'TFTP client for KolibriOS',0
516
str_server      db 'Server:',0
516
str_server      db 'Server:',0
517
str_source      db 'Remote file:',0
517
str_source      db 'Remote file:',0
518
str_destination db 'Local file:',0
518
str_destination db 'Local file:',0
519
str_mode        db 'Mode:',0
519
str_mode        db 'Mode:',0
520
str_method      db 'Method:',0
520
str_method      db 'Method:',0
521
str_blocksize   db 'Blocksize:',0
521
str_blocksize   db 'Blocksize:',0
522
str_kb_s        db 'kb/s',0
522
str_kb_s        db 'kb/s',0
523
str_complete    db '% complete',0
523
str_complete    db '% complete',0
524
str_transfer    db 'Transfer',0
524
str_transfer    db 'Transfer',0
525
 
525
 
526
str_error:
526
str_error:
527
._0 db 'Not defined, see error message (if any).',0
527
._0 db 'Not defined, see error message (if any).',0
528
._1 db 'File not found.',0
528
._1 db 'File not found.',0
529
._2 db 'Access violation.',0
529
._2 db 'Access violation.',0
530
._3 db 'Disk full or allocation exceeded.',0
530
._3 db 'Disk full or allocation exceeded.',0
531
._4 db 'Illegal TFTP operation.',0
531
._4 db 'Illegal TFTP operation.',0
532
._5 db 'Unknown transfer ID.',0
532
._5 db 'Unknown transfer ID.',0
533
._6 db 'File already exists.',0
533
._6 db 'File already exists.',0
534
._7 db 'No such user.',0
534
._7 db 'No such user.',0
535
 
535
 
536
 
536
 
537
netascii db 'NetASCII'
537
netascii db 'NetASCII'
538
octet    db 'Octet'
538
octet    db 'Octet'
539
get      db 'GET'
539
get      db 'GET'
540
put      db 'PUT'
540
put      db 'PUT'
541
 
541
 
542
BLK      db "512",0,0,0
542
BLK      db "512",0,0,0
543
 
543
 
544
last_ack dw ?
544
last_ack dw ?
545
 
545
 
546
fh       dd ?   ; file handle
546
fh       dd ?   ; file handle
547
fo       dd ?   ; file offset
547
fo       dd ?   ; file offset
548
fb       dd ?   ; file buffer
548
fb       dd ?   ; file buffer
549
 
549
 
550
SRV db "192.168.1.115",0
550
SRV db "192.168.1.115",0
551
rb (SRV + 256 - $)
551
rb (SRV + 256 - $)
552
 
552
 
553
remote_addr db "IMG00",0
553
remote_addr db "IMG00",0
554
rb (remote_addr + 256 - $)
554
rb (remote_addr + 256 - $)
555
 
555
 
556
local_addr  db "/hd0/1/KolibriOS/kernel.mnt",0
556
local_addr  db "/hd0/1/KolibriOS/kernel.mnt",0
557
rb (local_addr + 256 - $)
557
rb (local_addr + 256 - $)
558
 
558
 
559
I_END:
559
I_END:
560
mouse_dd        dd ?
560
mouse_dd        dd ?
561
buffer:
561
buffer:
562
rb buffer_len
562
rb buffer_len
563
 
563
 
564
rb 0x1000       ; stack
564
rb 0x1000       ; stack
565
 
565
 
566
IM_END:
566
IM_END: