Subversion Repositories Kolibri OS

Rev

Rev 3014 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5090 hidnplayr 1
format binary as ""
2
 
1155 clevermous 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'
3014 dunkaist 18
include '../../../../dll.inc'
1155 clevermous 19
 
5090 hidnplayr 20
include '../../../../network.inc'
1155 clevermous 21
 
22
; entry point
23
start:
24
; load libraries
5090 hidnplayr 25
	stdcall dll.Load, @IMPORT
1155 clevermous 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
 
5090 hidnplayr 121
library network, 'network.obj', console, 'console.obj'
1155 clevermous 122
import	network,	\
123
	getaddrinfo,	'getaddrinfo',	\
5090 hidnplayr 124
	freeaddrinfo,	'freeaddrinfo', \
1155 clevermous 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: