Subversion Repositories Kolibri OS

Rev

Rev 9017 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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