Subversion Repositories Kolibri OS

Rev

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

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