Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                                 ;;
  3. ;; Copyright (C) KolibriOS team 2010-2017. All rights reserved.    ;;
  4. ;; Distributed under terms of the GNU General Public License       ;;
  5. ;;                                                                 ;;
  6. ;;  netstat.asm - Network Status Tool for KolibriOS                ;;
  7. ;;                                                                 ;;
  8. ;;  Written by hidnplayr@kolibrios.org                             ;;
  9. ;;                                                                 ;;
  10. ;;          GNU GENERAL PUBLIC LICENSE                             ;;
  11. ;;             Version 2, June 1991                                ;;
  12. ;;                                                                 ;;
  13. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  14.  
  15. format binary as ""
  16.  
  17. BOX_WIDTH       = 390
  18. BOX_HEIGHT      = 185
  19.  
  20. use32
  21.  
  22.         org    0x0
  23.  
  24.         db     'MENUET01'       ; 8 byte id
  25.         dd     0x01             ; header version
  26.         dd     START            ; start of code
  27.         dd     I_END            ; size of image
  28.         dd     (I_END+0x1000)   ; memory for app
  29.         dd     (I_END+0x1000)   ; esp
  30.         dd     0, 0             ; I_Param, I_Path
  31.  
  32. include '../../proc32.inc'
  33. include '../../macros.inc'
  34. include '../../dll.inc'
  35. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  36.  
  37. include '../../network.inc'
  38.  
  39. include 'ipcfg.inc'
  40.  
  41. START:
  42.  
  43.         mcall   68, 11
  44.  
  45.         stdcall dll.Load, @IMPORT
  46.         or      eax, eax
  47.         jnz     exit
  48.  
  49.         mcall   40, EVM_REDRAW + EVM_BUTTON + EVM_STACK2 + EVM_KEY
  50.  
  51. window_redraw:
  52.  
  53. ; get system colors
  54.         mcall   48, 3, sc, 40
  55.  
  56. ; Notify kernel of start of window draw
  57.         mcall   12, 1
  58.  
  59. ; Draw the window
  60.         mcall   0, 100 shl 16 + 600, 100 shl 16 + 240, 0x34E1E1E1, , name
  61.  
  62. ; Define the buttons (for tabs)
  63.         mov     ebx, 5 shl 16 + 54
  64.         mov     ecx, 4 shl 16 + 21
  65.         mov     edx, 0x60000000 + 101
  66.   .buttonloop:
  67.         mcall   8
  68.         add     ebx, 60 shl 16
  69.         inc     edx
  70.         cmp     dl, 106
  71.         jle     .buttonloop
  72.  
  73. ; draw sides and upper lines of the tab buttons
  74.         mov     eax, 13
  75.         mov     ebx, 5 shl 16 + 1
  76.         mov     ecx, 4 shl 16 + 21
  77.         mov     edx, 0x00777777
  78.   .loop:
  79.         mcall
  80.         mov     bx, 54
  81.         mov     cx, 1
  82.         mcall
  83.         mov     bx, 1
  84.         mov     cx, 21
  85.         add     ebx, 54 shl 16
  86.         mcall
  87.         add     ebx, 6 shl 16
  88.         cmp     ebx, 360 shl 16
  89.         jb      .loop
  90.  
  91. ; Draw sides and bottom lines of the rectangle
  92.         mcall  , 0 shl 16 + 1, 25 shl 16 + BOX_HEIGHT;, 0x00777777
  93.         mcall  , (0+BOX_WIDTH) shl 16 +1, 25 shl 16 + (BOX_HEIGHT+1)
  94.         mcall  , 0 shl 16 + BOX_WIDTH, (25+BOX_HEIGHT) shl 16 + 1
  95.  
  96. redraw:
  97.  
  98. ; Draw interface buttons (on the right hand side)
  99.         call    draw_interfaces
  100.  
  101. ; Draw upper line of rectangle
  102.         mcall   13, 0 shl 16 + BOX_WIDTH, 25 shl 16 + 1, 0x00777777
  103.  
  104. ; Fill rectangle
  105.         mcall   13, 1 shl 16 + BOX_WIDTH-1, 26 shl 16 + BOX_HEIGHT-1, 0x00F3F3F3
  106.  
  107. ; Undefine IP settings button
  108.         mov     edx, 0x80000002
  109.         mcall   8
  110.  
  111. ; Fill tab buttons
  112.         mov     eax, 13
  113.         mov     ebx, 6 shl 16 + 53
  114.         mov     si, 101
  115.   .buttonloop:
  116.         mov     ecx, 6 shl 16 + 19
  117.         mov     edx, 0x00BBBBBB
  118.         cmp     si, [mode]
  119.         jne     @f
  120.         mov     edx, 0x00F3F3F3         ; Activated button has other colors
  121.         inc     ecx
  122.   @@:
  123.         mcall
  124.         mov     edx, 0x00E1E1E1
  125.         cmp     si, [mode]
  126.         jne     @f
  127.         mov     edx, 0x00FFFFFF         ; Activated button has other colors
  128.   @@:
  129.         mov     ecx, 5 shl 16 + 1
  130.         mcall
  131.         add     ebx, 60 shl 16
  132.         inc     si
  133.         cmp     si, 106
  134.         jle     .buttonloop
  135. ; Print button names on top of the buttons
  136.         mcall   4, 9 shl 16 + 12, 0x80000000, modes
  137.  
  138. ; Get information about the selected device
  139.         xor     ebx, ebx
  140.         mov     bh, [device]
  141.         mcall   74
  142.         mov     [device_type], eax
  143.  
  144.         cmp     [mode], 101
  145.         jne     .no_eth
  146.  
  147.         mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
  148.         add     ebx, 18
  149.         mov     edx, str_packets_rx
  150.         mcall
  151.         add     ebx, 18
  152.         mov     edx, str_bytes_tx
  153.         mcall
  154.         add     ebx, 18
  155.         mov     edx, str_bytes_rx
  156.         mcall
  157.         add     ebx, 18
  158.         mov     edx, str_speed_tx
  159.         mcall
  160.         add     ebx, 18
  161.         mov     edx, str_speed_rx
  162.         mcall
  163.         add     ebx, 18
  164.         mov     edx, str_link
  165.         mcall
  166.  
  167.         cmp     [device_type], 1
  168.         jne     end_of_draw
  169.  
  170.         add     ebx, 18
  171.         mov     edx, str_MAC
  172.         mcall
  173.  
  174.         mov     ebx, API_ETH
  175.         mov     bh, [device]
  176.         mcall   76
  177.         push    eax
  178.         push    bx
  179.  
  180.         mov     edx, 134 shl 16 + 35 + 7*18
  181.         call    draw_mac
  182.         jmp     end_of_draw
  183.  
  184.  .no_eth:
  185.  
  186.         cmp     [mode], 102
  187.         jne     .no_ip
  188.  
  189.         mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
  190.         add     ebx, 18
  191.         mov     edx, str_packets_rx
  192.         mcall
  193.         add     ebx, 18
  194.         mov     edx, str_ip
  195.         mcall
  196.         add     ebx, 18
  197.         mov     edx, str_dns
  198.         mcall
  199.         add     ebx, 18
  200.         mov     edx, str_subnet
  201.         mcall
  202.         add     ebx, 18
  203.         mov     edx, str_gateway
  204.         mcall
  205.  
  206.  
  207.         mov     ebx, API_IPv4 + 8
  208.         mov     bh, [device]
  209.         mcall   76
  210.         push    eax
  211.  
  212.         dec     bl
  213.         dec     bl
  214.         mcall   76
  215.         push    eax
  216.  
  217.         dec     bl
  218.         dec     bl
  219.         mcall   76
  220.         push    eax
  221.  
  222.         dec     bl
  223.         dec     bl
  224.         mcall   76
  225.         push    eax
  226.  
  227.         mov     edx, 134 shl 16 + 35 + 2*18
  228.         call    draw_ip
  229.  
  230.         add     edx, 18
  231.         call    draw_ip
  232.  
  233.         add     edx, 18
  234.         call    draw_ip
  235.  
  236.         add     edx, 18
  237.         call    draw_ip
  238.  
  239.         cmp     [device], 0
  240.         je      end_of_draw
  241.  
  242.         mcall   8, 128 shl 16 + 100, 150 shl 16 + 20, 2, [sc.work_button]
  243.         mcall   4, 150 shl 16 + 157, [sc.work_button_text], str_ip_cfg, str_ip_cfg.len
  244.  
  245.         jmp     end_of_draw
  246.  
  247.  .no_ip:
  248.  
  249.         cmp     [mode], 103
  250.         jne     .no_arp
  251.  
  252.         mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
  253.         add     ebx, 18
  254.         mov     edx, str_packets_rx
  255.         mcall
  256.         add     ebx, 18
  257.         mov     edx, str_arp
  258.         mcall
  259.         add     ebx, 18
  260.         mov     edx, str_conflicts
  261.         mcall
  262.  
  263.         mcall   4, 8 shl 16 + 130, 0x80000000, str_ARP_legend
  264.  
  265.         jmp     end_of_draw
  266.  
  267.  .no_arp:
  268.  
  269.         mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
  270.  
  271.         add     ebx, 18
  272.         mov     edx, str_packets_rx
  273.         mcall
  274.  
  275.         cmp     [mode], 106
  276.         jne     end_of_draw
  277.  
  278.         add     ebx, 18
  279.         mov     edx, str_missed
  280.         mcall
  281.  
  282.         add     ebx, 18
  283.         mov     edx, str_dumped
  284.         mcall
  285.  
  286.         add     ebx, 18
  287.         mov     edx, str_queued
  288.         mcall
  289.  
  290. end_of_draw:
  291.  
  292.         mcall   12, 2
  293.  
  294. draw_stats:
  295.  
  296.         cmp     [mode], 101
  297.         jne     not_101
  298.  
  299.         mov     ebx, API_ETH
  300.         mov     bh, [device]
  301.         mov     bl, 6
  302.   @@:
  303.         push    ebx
  304.         mcall   74
  305.         pop     ebx
  306.         push    eax
  307.         inc     bl
  308.         cmp     bl, 10
  309.         jbe     @r
  310.  
  311.         pop     ecx
  312.  
  313.         push    [time]
  314.         pop     [delta_time]
  315.         mcall   26, 9
  316.         mov     [time], eax
  317.         sub     eax, [delta_time]
  318.         jnz     @f
  319.         inc     eax             ; Zero time units? Lets make it at least one.
  320.   @@:
  321.         mov     [delta_time], eax
  322.  
  323.         mov     eax, [esp+4]    ; bytes received
  324.         push    eax
  325.         sub     eax, [prev_rx]
  326.         pop     [prev_rx]
  327.         xor     edx, edx
  328.         div     [delta_time]
  329.         push    eax
  330.  
  331.         mov     eax, [esp+4]    ; bytes sent
  332.         push    eax
  333.         sub     eax, [prev_tx]
  334.         pop     [prev_tx]
  335.         xor     edx, edx
  336.         div     [delta_time]
  337.         push    eax
  338.  
  339.         test    cl, cl
  340.         jnz     @f
  341.         mov     edx, str_down
  342.         jmp     .print_link
  343.   @@:
  344.         cmp     cl, 100b
  345.         jnz     @f
  346.         mov     edx, str_10m
  347.         jmp     .print_link
  348.   @@:
  349.         cmp     cl, 110b
  350.         jnz     @f
  351.         mov     edx, str_10mfd
  352.         jmp     .print_link
  353.   @@:
  354.         cmp     cl, 1000b
  355.         jnz     @f
  356.         mov     edx, str_100m
  357.         jmp     .print_link
  358.   @@:
  359.         cmp     cl, 1010b
  360.         jnz     @f
  361.         mov     edx, str_100mfd
  362.         jmp     .print_link
  363.   @@:
  364.         cmp     cl, 1100b
  365.         jnz     @f
  366.         mov     edx, str_1g
  367.         jmp     .print_link
  368.   @@:
  369.         cmp     cl, 1110b
  370.         jnz     @f
  371.         mov     edx, str_1gfd
  372.         jmp     .print_link
  373.   @@:
  374.         mov     edx, str_unknown
  375.  
  376.   .print_link:
  377.         mov     ebx, 134 shl 16 + 35 + 6*18
  378.         mov     ecx, 0xc0000000
  379.         mov     edi, 0x00f3f3f3
  380.         mcall   4
  381.  
  382. ; speed tx
  383.         mov     ebx, 0x000a0000
  384.         pop     ecx
  385.         mov     edx, 134 shl 16 + 35 + 5*18
  386.         mov     esi, 0x40000000
  387.         mcall   47
  388.  
  389. ; speed rx
  390.         sub     edx, 18
  391.         pop     ecx
  392.         mcall
  393.  
  394. ; bytes received
  395.         sub     edx, 18
  396.         pop     ecx
  397.         mcall
  398.  
  399. ; bytes sent
  400.         sub     edx, 18
  401.         pop     ecx
  402.         mcall
  403.  
  404. ; packets received
  405.         sub     edx, 18
  406.         pop     ecx
  407.         mcall
  408.  
  409. ; packets sent
  410.         sub     edx, 18
  411.         pop     ecx
  412.         mcall
  413.  
  414.         jmp     mainloop
  415.  
  416.  
  417. not_101:
  418.  
  419.         cmp     [mode], 102
  420.         jne     not_102
  421.  
  422.         mov     ebx, API_IPv4
  423.         mov     bh, [device]
  424.         push    ebx
  425.         mcall   76
  426.         pop     ebx
  427.         push    eax
  428.  
  429.         inc     bl
  430.         push    ebx
  431.         mcall   76
  432.         pop     ebx
  433.         push    eax
  434.  
  435.  
  436.         mov     ebx, 0x000a0000
  437.         pop     ecx
  438.         mov     edx, 134 shl 16 + 35 + 18
  439.         mov     esi, 0x40000000
  440.         mov     edi, 0x00F3F3F3
  441.         mcall   47
  442.  
  443.         sub     edx, 18
  444.         pop     ecx
  445.         mcall
  446.  
  447.         jmp     mainloop
  448.  
  449.  
  450. not_102:
  451.  
  452.         cmp     [mode], 103
  453.         jne     not_103
  454.  
  455.         mov     ebx, API_ARP
  456.         mov     bh, [device]
  457.         push    ebx
  458.         mcall   76      ; tx
  459.         pop     ebx
  460.         push    eax
  461.  
  462.         inc     bl
  463.         push    ebx
  464.         mcall   76      ; rx
  465.         pop     ebx
  466.         push    eax
  467.  
  468.         inc     bl
  469.         push    ebx
  470.         mcall   76      ; entries
  471.         pop     ebx
  472.         push    eax
  473.  
  474.         mov     bl, 7
  475.         push    ebx
  476.         mcall   76
  477.         pop     ebx
  478.         push    eax
  479.  
  480.         mov     ebx, 0x000a0000
  481.         pop     ecx
  482.         mov     edx, 134 shl 16 + 35 + 3*18
  483.         mov     esi, 0x40000000
  484.         mov     edi, 0x00F3F3F3
  485.         mcall   47
  486.  
  487.         sub     edx, 18
  488.         pop     ecx
  489.         mcall
  490.  
  491.         sub     edx, 18
  492.         pop     ecx
  493.         mcall
  494.  
  495.         sub     edx, 18
  496.         pop     ecx
  497.         mcall
  498.  
  499. ;        mov     edx, 50 shl 16 + 150
  500.         mov     [last], 0
  501.  
  502.   .arp_loop:
  503.         mov     ebx, API_ARP + 3                ; read ARP entry
  504.         mov     bh, [device]
  505.         mcall   76, ,[last], , , arp_buf
  506.         cmp     eax, -1
  507.         je      mainloop
  508.  
  509.         mov     ebx, [last]
  510.         imul    ebx, 16
  511.         add     ebx, 8 shl 16 + 140
  512.         mcall   4, , 0x80000000, str_ARP_entry
  513.         mov     edx, ebx
  514.  
  515.         mov     eax, 47
  516.         mov     ebx, 0x00030000
  517.         mov     esi, 0x40000000
  518.         mov     edi, 0x00F3F3F3
  519.         xor     ecx, ecx
  520.  
  521.         mov     cl, byte[arp_buf.IP+0]
  522.         mcall
  523.  
  524.         mov     cl, byte[arp_buf.IP+1]
  525.         add     edx, 24 shl 16
  526.         mcall
  527.  
  528.         mov     cl, byte[arp_buf.IP+2]
  529.         add     edx, 24 shl 16
  530.         mcall
  531.  
  532.         mov     cl, byte[arp_buf.IP+3]
  533.         add     edx, 24 shl 16
  534.         mcall
  535.  
  536.  
  537.         mov     ebx, 0x00020100
  538.         mov     cl, byte[arp_buf.MAC+0]
  539.         add     edx, 36 shl 16
  540.         mcall
  541.  
  542.         mov     cl, byte[arp_buf.MAC+1]
  543.         add     edx, 18 shl 16
  544.         mcall
  545.  
  546.         mov     cl, byte[arp_buf.MAC+2]
  547.         add     edx, 18 shl 16
  548.         mcall
  549.  
  550.         mov     cl, byte[arp_buf.MAC+3]
  551.         add     edx, 18 shl 16
  552.         mcall
  553.  
  554.         mov     cl, byte[arp_buf.MAC+4]
  555.         add     edx, 18 shl 16
  556.         mcall
  557.  
  558.         mov     cl, byte[arp_buf.MAC+5]
  559.         add     edx, 18 shl 16
  560.         mcall
  561.  
  562.         mov     ebx, 0x00040000
  563.         mov     cx, [arp_buf.status]
  564.         add     edx, 30 shl 16
  565.         mcall
  566.  
  567.         mov     cx, [arp_buf.TTL]
  568.         add     edx, 60 shl 16
  569.         mcall
  570.  
  571.         add     dx, 18
  572.         rol     edx, 16
  573.         mov     dx, 8
  574.         rol     edx, 16
  575.         inc     [last]
  576.  
  577.         jmp     .arp_loop
  578.  
  579. not_103:
  580.  
  581.         cmp     [mode], 104
  582.         jne     not_104
  583.  
  584.         mov     ebx, API_ICMP
  585.         mov     bh, [device]
  586.         push    ebx
  587.         mcall   76
  588.         pop     ebx
  589.         push    eax
  590.  
  591.         inc     bl
  592.         push    ebx
  593.         mcall   76
  594.         pop     ebx
  595.         push    eax
  596.  
  597.         mov     ebx, 0x000a0000
  598.         pop     ecx
  599.         mov     edx, 134 shl 16 + 35 + 18
  600.         mov     esi, 0x40000000
  601.         mov     edi, 0x00F3F3F3
  602.         mcall   47
  603.  
  604.         sub     edx, 18
  605.         pop     ecx
  606.         mcall
  607.  
  608.         jmp     mainloop
  609.  
  610. not_104:
  611.  
  612.         cmp     [mode], 105
  613.         jne     not_105
  614.  
  615.         mov     ebx, API_UDP
  616.         mov     bh, [device]
  617.         push    ebx
  618.         mcall   76
  619.         pop     ebx
  620.         push    eax
  621.  
  622.         inc     bl
  623.         push    ebx
  624.         mcall   76
  625.         pop     ebx
  626.         push    eax
  627.  
  628.         mov     ebx, 0x000a0000
  629.         pop     ecx
  630.         mov     edx, 134 shl 16 + 35 + 18
  631.         mov     esi, 0x40000000
  632.         mov     edi, 0x00F3F3F3
  633.         mcall   47
  634.  
  635.         sub     edx, 18
  636.         pop     ecx
  637.         mcall
  638.  
  639.         jmp     mainloop
  640.  
  641. not_105:
  642.  
  643.         cmp     [mode], 106
  644.         jne     not_106
  645.  
  646.         mov     ebx, API_TCP
  647.         mov     bh, [device]
  648.         push    ebx
  649.         mcall   76
  650.         pop     ebx
  651.         push    eax
  652.  
  653.         inc     bl
  654.         push    ebx
  655.         mcall   76
  656.         pop     ebx
  657.         push    eax
  658.  
  659.         inc     bl
  660.         push    ebx
  661.         mcall   76
  662.         pop     ebx
  663.         push    eax
  664.  
  665.         inc     bl
  666.         push    ebx
  667.         mcall   76
  668.         pop     ebx
  669.         push    eax
  670.  
  671.         inc     bl
  672.         push    ebx
  673.         mcall   76
  674.         pop     ebx
  675.         push    eax
  676.  
  677.         mov     ebx, 0x000a0000
  678.         pop     ecx
  679.         mov     edx, 134 shl 16 + 35 + 18*4
  680.         mov     esi, 0x40000000
  681.         mov     edi, 0x00F3F3F3
  682.         mcall   47
  683.  
  684.         sub     edx, 18
  685.         pop     ecx
  686.         mcall
  687.  
  688.         sub     edx, 18
  689.         pop     ecx
  690.         mcall
  691.  
  692.         sub     edx, 18
  693.         pop     ecx
  694.         mcall
  695.  
  696.         sub     edx, 18
  697.         pop     ecx
  698.         mcall
  699.  
  700.         jmp     mainloop
  701.  
  702. not_106:
  703.  
  704. mainloop:
  705.  
  706.         mcall   23, 50          ; wait for event with timeout    (0,5 s)
  707.  
  708.         cmp     eax, EV_REDRAW
  709.         je      window_redraw
  710.         cmp     eax, EV_BUTTON
  711.         je      button
  712.         cmp     eax, EV_KEY
  713.         je      key
  714.         cmp     eax, 11
  715.         je      redraw
  716.  
  717.         jmp     draw_stats
  718.  
  719. button:                         ; button
  720.         mcall   17              ; get id
  721.         cmp     ah, 1
  722.         je      exit
  723.         cmp     ah, 2
  724.         je      .ipcfg
  725.         cmp     ah, 0
  726.         je      .interface
  727.         shr     ax, 8
  728.         mov     [mode], ax
  729.         jmp     redraw
  730.  
  731.   .ipcfg:
  732.         mcall   51, 1, ipcfg, I_END+0x1000
  733.         jmp     mainloop
  734.  
  735.   .interface:
  736.         shr     eax, 16
  737.         mov     [device], al
  738.         jmp     redraw
  739.  
  740. key:
  741.         mcall   2
  742.         cmp     ah, 9
  743.         je      .tab
  744.         cmp     ah, 183
  745.         je      .pgdown
  746.         cmp     ah, 184
  747.         je      .pgup
  748.         jmp     mainloop
  749.  
  750.   .tab:
  751.         inc     [mode]
  752.         cmp     [mode], 106
  753.         jbe     redraw
  754.         mov     [mode], 101
  755.         jmp     redraw
  756.  
  757.   .pgdown:
  758.         inc     [device]
  759.         mov     al, [device]
  760.         cmp     al, [last_device]
  761.         jbe     redraw
  762.         mov     [device], 0
  763.         jmp     redraw
  764.  
  765.   .pgup:
  766.         dec     [device]
  767.         cmp     [device], 0
  768.         jge     redraw
  769.         mov     al, [last_device]
  770.         mov     [device], al
  771.         jmp     redraw
  772.  
  773. exit:
  774.         mcall   -1
  775.  
  776.  
  777.  
  778. draw_mac:
  779.  
  780.         mov     eax, 47
  781.         mov     ebx, 0x00020100
  782.         mov     esi, 0x40000000
  783.         mov     edi, 0x00F3F3F3
  784.  
  785.         mov     cl, [esp+4]
  786.         mcall
  787.  
  788.         mov     cl, [esp+4+1]
  789.         add     edx, 18 shl 16
  790.         mcall
  791.  
  792.         mov     cl, [esp+4+2]
  793.         add     edx, 18 shl 16
  794.         mcall
  795.  
  796.         mov     cl, [esp+4+3]
  797.         add     edx, 18 shl 16
  798.         mcall
  799.  
  800.         mov     cl, [esp+4+4]
  801.         add     edx, 18 shl 16
  802.         mcall
  803.  
  804.         mov     cl, [esp+4+5]
  805.         add     edx, 18 shl 16
  806.         mcall
  807.  
  808.         sub     edx, 5*18 shl 16
  809.  
  810.         ret     6
  811.  
  812.  
  813. draw_ip:
  814.  
  815.         mov     eax, 47
  816.         mov     ebx, 0x00030000
  817.         mov     esi, 0x40000000
  818.         mov     edi, 0x00F3F3F3
  819.  
  820.         xor     ecx, ecx
  821.  
  822.         mov     cl, [esp+4]
  823.         mcall
  824.  
  825.         mov     cl, [esp+4+1]
  826.         add     edx, 24 shl 16
  827.         mcall
  828.  
  829.         mov     cl, [esp+4+2]
  830.         add     edx, 24 shl 16
  831.         mcall
  832.  
  833.         mov     cl, [esp+4+3]
  834.         add     edx, 24 shl 16
  835.         mcall
  836.  
  837.         sub     edx, 3*24 shl 16
  838.         ret     4
  839.  
  840.  
  841. draw_interfaces:
  842.  
  843.         mov     [.btnpos], 5 shl 16 + 20
  844.         mov     [.txtpos], 405 shl 16 + 12
  845.  
  846.         mcall   74, -1          ; get number of active network devices
  847.         mov     ecx, eax
  848.         dec     al
  849.         mov     [last_device], al
  850.         cmp     [device], al
  851.         jbe     @f
  852.         mov     [device], 0
  853.   @@:
  854.  
  855.         xor     ebx, ebx        ; get device type
  856.   .loop:
  857.         mcall   74
  858.         cmp     eax, 1          ; loopback or ethernet?
  859.         jbe     .hit
  860.         inc     bh
  861.         jb      .loop           ; tried all 256?
  862.         ret
  863.  
  864.  
  865.   .hit:
  866.         push    ecx ebx
  867.         movzx   edx, bh
  868.         shl     edx, 8
  869.         mov     esi, 0x00BBBbbb
  870.         cmp     bh, [device]
  871.         cmove   esi, 0x0081BBFF
  872.         mcall   8, 400 shl 16 + 185, [.btnpos]
  873.         mov     ebx, [esp]
  874.         inc     bl
  875.         mov     ecx, namebuf
  876.         mov     edx, namebuf
  877.         mcall   74                              ; get device name
  878.         cmp     eax, -1
  879.         jne     @f
  880.         mov     edx, str_unknown
  881.        @@:
  882.         mcall   4, [.txtpos], 0x80000000        ; print the name
  883.         pop     ebx ecx
  884.  
  885.         inc     bh
  886.  
  887.         add     [.btnpos], 25 shl 16
  888.         add     [.txtpos], 25
  889.  
  890.         dec     ecx
  891.         jnz     .loop
  892.  
  893.         ret
  894.  
  895.   .btnpos       dd ?
  896.   .txtpos       dd ?
  897.  
  898.  
  899. ; DATA AREA
  900.  
  901. align 16
  902. @IMPORT:
  903.  
  904. library box_lib         , 'box_lib.obj', \
  905.         libini          , 'libini.obj'
  906.  
  907. import  libini, \
  908.         ini.get_str     , 'ini_get_str'         ,\
  909.         ini.set_str     , 'ini_set_str'         ,\
  910.         ini.enum_sections, 'ini_enum_sections'
  911.  
  912. import  box_lib                                 ,\
  913.         edit_box_draw   , 'edit_box'            ,\
  914.         edit_box_key    , 'edit_box_key'        ,\
  915.         edit_box_mouse  , 'edit_box_mouse'      ,\
  916.         edit_set_text   , 'edit_box_set_text'   ,\
  917.         version_ed      , 'version_ed'          ,\
  918.         init_checkbox   , 'init_checkbox2'      ,\
  919.         check_box_draw  , 'check_box_draw2'     ,\
  920.         check_box_mouse , 'check_box_mouse2'    ,\
  921.         version_ch      , 'version_ch2'         ,\
  922.         option_box_draw , 'option_box_draw'     ,\
  923.         option_box_mouse, 'option_box_mouse'    ,\
  924.         version_op      , 'version_op'
  925.  
  926. name            db 'Network status', 0
  927. mode            dw 101          ; currently selected protocol
  928. device          db 1            ; currently selected device
  929. last_device     db ?            ; last device available
  930. device_type     dd ?
  931. last            dd ?
  932. modes           db 'Physical    IPv4      ARP       ICMP      UDP       TCP', 0
  933.  
  934. str_packets_tx  db 'Packets sent:', 0
  935. str_packets_rx  db 'Packets received:', 0
  936. str_bytes_tx    db 'Bytes sent:', 0
  937. str_bytes_rx    db 'Bytes received:', 0
  938. str_MAC         db 'MAC address:           -  -  -  -  -', 0
  939. str_ip          db 'IP address:             .   .   .', 0
  940. str_dns         db 'DNS address:            .   .   .', 0
  941. str_subnet      db 'Subnet mask:            .   .   .', 0
  942. str_gateway     db 'Standard gateway:       .   .   .', 0
  943. str_arp         db 'ARP entrys:', 0
  944. str_conflicts   db 'ARP conflicts:', 0
  945. str_missed      db 'Packets missed:', 0
  946. str_dumped      db 'Packets dumped:', 0
  947. str_queued      db 'Packets queued:', 0
  948. str_link        db 'Link state:', 0
  949. str_speed_tx    db 'Upload (kb/s):', 0
  950. str_speed_rx    db 'Download (kb/s):', 0
  951. str_ip_cfg      db 'Configure'
  952. .len = $ - str_ip_cfg
  953.  
  954. str_down        db 'disconnected        ', 0
  955. str_unknown     db 'unknown             ', 0
  956. str_10m         db '10 Mbit Half duplex ', 0
  957. str_10mfd       db '10 Mbit Full duplex ', 0
  958. str_100m        db '100 Mbit Half duplex', 0
  959. str_100mfd      db '100 Mbit Full duplex', 0
  960. str_1g          db '1 Gbit Half duplex  ', 0
  961. str_1gfd        db '1 Gbit Full duplex  ', 0
  962.  
  963. str_ARP_legend  db 'IP-address        MAC-address         Status    TTL', 0
  964. str_ARP_entry   db '   .   .   .        -  -  -  -  -', 0
  965.  
  966. prev_rx         dd ?
  967. prev_tx         dd ?
  968. time            dd ?
  969. delta_time      dd ?
  970.  
  971. namebuf         rb 64
  972. arp_buf         ARP_entry
  973.  
  974. sc              system_colors
  975.  
  976. I_END: