Rev 3545 | Rev 3687 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3545 | Rev 3574 | ||
---|---|---|---|
Line 22... | Line 22... | ||
22 | ; standard header |
22 | ; standard header |
23 | db 'MENUET01' ; signature |
23 | db 'MENUET01' ; signature |
24 | dd 1 ; header version |
24 | dd 1 ; header version |
25 | dd start ; entry point |
25 | dd start ; entry point |
26 | dd i_end ; initialized size |
26 | dd i_end ; initialized size |
27 | dd mem ; required memory |
27 | dd mem+4096 ; required memory |
28 | dd mem ; stack pointer |
28 | dd mem+4096 ; stack pointer |
29 | dd s ; parameters |
29 | dd hostname ; parameters |
30 | dd 0 ; path |
30 | dd 0 ; path |
Line 31... | Line 31... | ||
31 | 31 | ||
32 | include '../macros.inc' |
32 | include '../macros.inc' |
33 | purge mov,add,sub |
33 | purge mov,add,sub |
Line 51... | Line 51... | ||
51 | push 25 |
51 | push 25 |
52 | push 80 |
52 | push 80 |
53 | call [con_init] |
53 | call [con_init] |
Line 54... | Line 54... | ||
54 | 54 | ||
55 | ; Check for parameters |
55 | ; Check for parameters |
56 | cmp byte [s], 0 |
56 | cmp byte [hostname], 0 |
Line 57... | Line 57... | ||
57 | jne resolve |
57 | jne resolve |
58 | 58 | ||
59 | main: |
59 | main: |
60 | call [con_cls] |
60 | call [con_cls] |
61 | ; Welcome user |
61 | ; Welcome user |
Line -... | Line 62... | ||
- | 62 | push str1 |
|
62 | push str1 |
63 | call [con_write_asciiz] |
63 | call [con_write_asciiz] |
64 | |
64 | 65 | prompt: |
|
65 | ; write prompt |
66 | ; write prompt |
66 | push str2 |
67 | push str2 |
67 | call [con_write_asciiz] |
68 | call [con_write_asciiz] |
68 | ; read string |
69 | ; read string |
69 | mov esi, s |
70 | mov esi, hostname |
70 | push 256 |
71 | push 256 |
71 | push esi |
72 | push esi |
Line 76... | Line 77... | ||
76 | cmp byte [esi], 10 |
77 | cmp byte [esi], 10 |
77 | jz done |
78 | jz done |
Line 78... | Line 79... | ||
78 | 79 | ||
Line -... | Line 80... | ||
- | 80 | resolve: |
|
- | 81 | ||
79 | resolve: |
82 | mov [sockaddr1.port], 23 shl 8 |
80 | 83 | ||
81 | ; delete terminating '\n' |
84 | ; delete terminating '\n' |
82 | mov esi, s |
85 | mov esi, hostname |
- | 86 | @@: |
|
- | 87 | lodsb |
|
83 | @@: |
88 | cmp al, ':' |
84 | lodsb |
89 | je .do_port |
85 | cmp al, 0x20 |
90 | cmp al, 0x20 |
- | 91 | ja @r |
|
Line -... | Line 92... | ||
- | 92 | mov byte [esi-1], 0 |
|
- | 93 | jmp .done |
|
- | 94 | ||
- | 95 | .do_port: |
|
- | 96 | xor eax, eax |
|
- | 97 | xor ebx, ebx |
|
- | 98 | mov byte [esi-1], 0 |
|
86 | ja @r |
99 | .portloop: |
87 | mov byte [esi-1], 0 |
100 | lodsb |
88 | 101 | cmp al, 0x20 |
|
89 | call [con_cls] |
102 | jbe .port_done |
90 | push str3 |
103 | sub al, '0' |
- | 104 | jb hostname_error |
|
- | 105 | cmp al, 9 |
|
- | 106 | ja hostname_error |
|
- | 107 | lea ebx, [ebx*4 + ebx] |
|
- | 108 | shl ebx, 1 |
|
- | 109 | add ebx, eax |
|
- | 110 | jmp .portloop |
|
- | 111 | ||
- | 112 | .port_done: |
|
- | 113 | xchg bl, bh |
|
Line 91... | Line 114... | ||
91 | call [con_write_asciiz] |
114 | mov [sockaddr1.port], bx |
92 | push s |
115 | |
93 | call [con_write_asciiz] |
116 | .done: |
94 | 117 | ||
95 | ; resolve name |
118 | ; resolve name |
96 | push esp ; reserve stack place |
119 | push esp ; reserve stack place |
97 | push esp ; fourth parameter |
120 | push esp ; ptr to result |
98 | push 0 ; third parameter |
121 | push 0 ; addrinfo hints |
99 | push 0 ; second parameter |
122 | push 0 ; servname |
100 | push s ; first parameter |
123 | push hostname; hostname |
101 | call [getaddrinfo] |
124 | call [getaddrinfo] |
Line -... | Line 125... | ||
- | 125 | pop esi |
|
- | 126 | ; test for error |
|
- | 127 | test eax, eax |
|
- | 128 | jnz fail |
|
- | 129 | ||
- | 130 | call [con_cls] |
|
102 | pop esi |
131 | push str3 |
103 | ; test for error |
132 | call [con_write_asciiz] |
104 | test eax, eax |
133 | push hostname |
105 | jnz fail |
134 | call [con_write_asciiz] |
Line 215... | Line 244... | ||
215 | 244 | ||
216 | fail2: |
245 | fail2: |
217 | push str6 |
246 | push str6 |
Line 218... | Line 247... | ||
218 | call [con_write_asciiz] |
247 | call [con_write_asciiz] |
Line 219... | Line 248... | ||
219 | 248 | ||
220 | jmp fail.wait |
249 | jmp prompt |
221 | 250 | ||
- | 251 | fail: |
|
- | 252 | push str5 |
|
- | 253 | call [con_write_asciiz] |
|
222 | fail: |
254 | |
223 | push str5 |
255 | jmp prompt |
224 | call [con_write_asciiz] |
256 | |
225 | .wait: |
- | |
226 | push str10 |
257 | hostname_error: |
Line 227... | Line 258... | ||
227 | call [con_write_asciiz] |
258 | push str11 |
228 | call [con_getch2] |
259 | call [con_write_asciiz] |
229 | jmp main |
260 | jmp prompt |
230 | 261 | ||
Line 250... | Line 281... | ||
250 | jz .loop |
281 | jz .loop |
251 | mcall -1 |
282 | mcall -1 |
Line 252... | Line 283... | ||
252 | 283 | ||
253 | ; data |
284 | ; data |
- | 285 | title db 'Telnet',0 |
|
254 | title db 'Telnet',0 |
286 | str1 db 'Telnet for KolibriOS',10,10,\ |
255 | str1 db 'Telnet for KolibriOS v0.11',10,10,'Please enter URL of telnet server (for example: towel.blinkenlights.nl)',10,10,0 |
287 | 'Please enter URL of telnet server (for example: towel.blinkenlights.nl:23)',10,10,0 |
256 | str2 db '> ',0 |
288 | str2 db '> ',0 |
257 | str3 db 'Connecting to: ',0 |
289 | str3 db 'Connecting to ',0 |
258 | str4 db 10,0 |
- | |
259 | str5 db 10,'Name resolution failed.',10,0 |
- | |
260 | str6 db 10,'Could not open socket.',10,0 |
290 | str4 db 10,0 |
261 | str8 db ' (',0 |
291 | str8 db ' (',0 |
- | 292 | str9 db ')',10,0 |
|
- | 293 | ||
262 | str9 db ')',10,0 |
294 | str5 db 'Name resolution failed.',10,10,0 |
- | 295 | str6 db 'Could not open socket.',10,10,0 |
|
Line 263... | Line 296... | ||
263 | str10 db 'Push any key to continue.',0 |
296 | str11 db 'Invalid hostname.',10,10,0 |
264 | 297 | ||
265 | sockaddr1: |
298 | sockaddr1: |
266 | dw AF_INET4 |
299 | dw AF_INET4 |
267 | .port dw 0x1700 ; 23 |
300 | .port dw 0 |
Line 268... | Line 301... | ||
268 | .ip dd 0 |
301 | .ip dd 0 |
Line 296... | Line 329... | ||
296 | 329 | ||
Line 297... | Line 330... | ||
297 | i_end: |
330 | i_end: |
298 | 331 | ||
299 | socketnum dd ? |
332 | socketnum dd ? |
- | 333 | buffer_ptr rb BUFFERSIZE+1 |
|
- | 334 | send_data rb 1 |
|
Line 300... | Line -... | ||
300 | buffer_ptr rb BUFFERSIZE+1 |
- | |
301 | send_data rb 100 |
- | |
302 | 335 |