Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3545 hidnplayr 1
format binary as ""
2
 
3
use32
4
; standard header
5
        db      'MENUET01'      ; signature
6
        dd      1               ; header version
7
        dd      start           ; entry point
8
        dd      i_end           ; initialized size
9
        dd      mem             ; required memory
10
        dd      mem             ; stack pointer
11
        dd      0               ; parameters
12
        dd      0               ; path
13
 
14
; useful includes
15
include '../macros.inc'
16
purge mov,add,sub
17
include '../proc32.inc'
18
include '../dll.inc'
19
 
20
include '../network.inc'
21
 
22
; entry point
23
start:
24
; load libraries
25
        stdcall dll.Load, @IMPORT
26
        test    eax, eax
27
        jnz     exit
28
; initialize console
29
        push    1
30
        call    [con_start]
31
        push    title
32
        push    -1
33
        push    -1
34
        push    -1
35
        push    -1
36
        call    [con_init]
37
; main loop
38
main:
39
; write prompt
40
        push    str1
41
        call    [con_write_asciiz]
42
; read string
43
        mov     esi, s
44
        push    256
45
        push    esi
46
        call    [con_gets]
47
; check for exit
48
        test    eax, eax
49
        jz      done
50
        cmp     byte [esi], 10
51
        jz      done
52
; delete terminating '\n'
53
        push    esi
54
@@:
55
        lodsb
56
        test    al, al
57
        jnz     @b
58
        mov     byte [esi-2], al
59
        pop     esi
60
; resolve name
61
        push    esp     ; reserve stack place
62
        push    esp     ; fourth parameter
63
        push    0       ; third parameter
64
        push    0       ; second parameter
65
        push    esi     ; first parameter
66
        call    [getaddrinfo]
67
        pop     esi
68
; test for error
69
        test    eax, eax
70
        jnz     fail
71
; write results
72
        push    str2
73
        call    [con_write_asciiz]
74
        mov     edi, esi
75
addrloop:
76
; before all subsequent addresses print comma
77
        cmp     edi, esi
78
        jz      @f
79
        push    str3
80
        call    [con_write_asciiz]
81
@@:
82
; convert IP address to decimal notation
83
        mov     eax, [edi+addrinfo.ai_addr]
84
        pushd   [eax+sockaddr_in.sin_addr]
85
        call    [inet_ntoa]
86
; write result
87
        push    eax
88
        call    [con_write_asciiz]
89
; advance to next item
90
        mov     edi, [edi+addrinfo.ai_next]
91
        test    edi, edi
92
        jnz     addrloop
93
; free allocated memory
94
        push    esi
95
        call    [freeaddrinfo]
96
; write newline and continue main loop
97
        push    str4
98
@@:
99
        call    [con_write_asciiz]
100
        jmp     main
101
fail:
102
        push    str5
103
        jmp     @b
104
done:
105
        push    1
106
        call    [con_exit]
107
exit:
108
        mcall   -1
109
 
110
; data
111
title   db      'Names resolver',0
112
str1    db      'Host name to resolve: ',0
113
str2    db      'IP address(es): ',0
114
str3    db      ', ',0
115
str4    db      10,0
116
str5    db      'Name resolution failed.',10,0
117
; import
118
align 4
119
@IMPORT:
120
 
121
library network, 'network.obj', console, 'console.obj'
122
import  network,        \
123
        getaddrinfo,    'getaddrinfo',  \
124
        freeaddrinfo,   'freeaddrinfo', \
125
        inet_ntoa,      'inet_ntoa'
126
import  console,        \
127
        con_start,      'START',        \
128
        con_init,       'con_init',     \
129
        con_write_asciiz,       'con_write_asciiz',     \
130
        con_exit,       'con_exit',     \
131
        con_gets,       'con_gets'
132
i_end:
133
s       rb      256
134
align   4
135
rb      4096    ; stack
136
mem: