Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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:
  137.