?login_element?

Subversion Repositories NedoOS

Rev

Rev 1510 | Blame | Compare with Previous | Last modification | View Log | Download

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4.         org PROGSTART
  5. dns_err_count=250
  6. cmd_begin
  7.  
  8. ;init
  9.         YIELD
  10.         OS_GETTIMER ;dehl=timer
  11.         ld (icmpstarttime),hl
  12.  
  13.         ld sp,0x8000
  14.         call initstdio
  15.         ;ld e,6
  16.         ;OS_SETGFX ;text mode set
  17.  
  18.         OS_GETMAINPAGES ;hlde
  19.         push de
  20.         push hl
  21.         ld e,l
  22.         OS_DELPAGE
  23.         pop hl
  24.         ld e,h
  25.         OS_DELPAGE
  26.         pop de
  27.         OS_DELPAGE
  28. ;main
  29. ;check cmdline
  30.         call print_nl
  31.         ld hl,COMMANDLINE
  32.  
  33. ping_checkkeys ;Check cmdline keys
  34.         call skipword_hl ;skip arg0
  35.         call skipspaces_hl
  36.         ld a,(hl)
  37.         cp '-'
  38.         jr nz,ping_keysok
  39.         inc hl
  40.         ld a,(hl)
  41.         cp 'd'
  42.         call z,ping_setkey_d
  43.         cp 's'
  44.         call z,ping_setkey_s
  45.         cp 'i'
  46.         call z,ping_setkey_i
  47.         cp 'c'
  48.         call z,ping_setkey_c
  49.         cp 'h'
  50.         jp z,ping_showhelp
  51.         cp 'V'
  52.         call z,ping_showversion
  53.         jr ping_checkkeys
  54.  
  55. ping_keysok
  56.         ld de,arg_hostname
  57.         call strcopy_hltode
  58.  
  59.         ld a,(arg_hostname)
  60.         or a
  61.         jp z, ping_showusage ;if no hostname show usage
  62.  
  63.         ld hl,arg_hostname-1 ;фы  єфюсёЄтр т Ўшъых
  64.         ld de,ip
  65.  
  66. ping_nextdig
  67.         inc hl         ;check for ip-address in arg
  68.         call strtobyte_hltode
  69.         ld a,(hl)
  70.         cp '.'
  71.         jr z,ping_nextdig
  72.         ld a,(hl)
  73.         or a
  74.         jr nz,ping_resolve
  75.         ex hl,de
  76.         ld de,ip
  77.         sbc hl,de
  78.         ld de,4
  79.         sbc hl,de
  80.         ld a,h
  81.         or l
  82.         jp z,ping_noresolve ; We have ip in arg
  83.  
  84. ping_resolve
  85.  
  86.         ld de,arg_hostname
  87.         call dns_resolver ; resolving ip
  88.         ld a,h
  89.         or l   ;in HL ip address or zero
  90.         jp z,ping_resolveerror
  91.         ld de,ip; copy ip
  92.         ld bc,4
  93.         ldir
  94.  
  95. ping_noresolve
  96.  
  97.         ld hl,ip
  98.         ld de,txtip ; convert to text
  99.         call ping_iptostr_hltode
  100.  
  101.         ld hl,txt_head1 ; showing message ping to blablabla
  102.         call print_hl
  103.         ld hl,arg_hostname
  104.         call print_hl
  105.         ld hl,txt_head2
  106.         call print_hl
  107.         ld hl,txtip
  108.         call print_hl
  109.         ld hl,txt_head3
  110.         call print_hl
  111.         ld a,(icmpdatasize)
  112.         call printbyte_a
  113.         ld a,'('
  114.         PRCHAR_
  115.         ld a,(icmpdatasize)
  116.         add 8+6 ; header icmp + header ip
  117.         call printbyte_a
  118.         ld a,')'
  119.         PRCHAR_
  120.         ld hl,txt_head4
  121.         call print_hl
  122.         xor a ; Preparing connect params
  123.         ld hl,ip
  124.         ld de,conparam+2
  125.         ld (de),a ; No port set for ipraw mode
  126.         inc de
  127.         ld bc,4
  128.         ldir ; copy ip address
  129.  
  130.         ld de,0x0202 ; AF_INET,SOCK_ICMP
  131.         OS_NETSOCKET
  132.         ld a,l
  133.         ld c,l
  134.         ld (soc1),a ; save socket to soc1
  135.         or a
  136.         ld hl,txt_socketerror ; In c error code
  137.         jp m, ping_error_hl
  138.  
  139.         ;ld de,conparam
  140.         ;OS_NETCONNECT ; open socket
  141.         ;ld c,a
  142.         ;ld a,l
  143.         ;or a
  144.         ;ld hl,txt_socketopenerror ; In c error code
  145.         ;jp m, ping_error_hl
  146.  
  147.         ld bc,(icmpcnt) ; num of packets
  148. ping_loop
  149.         push bc
  150.         call ping_buildicmppacket
  151.  
  152.         ld hl,(icmpdatasize)
  153.         ld de,8 ; header 8 bytes
  154.         add hl,de
  155.         ld a,(soc1)
  156.         ld ix,icmppacket ; send icmp packet
  157.         ld de,conparam
  158.  
  159.         OS_WIZNETWRITE
  160.         ld a,h
  161.         or a
  162.         jp p,ping_nowriteerr
  163.         ld hl,txt_writeerror
  164.         call print_hl
  165.  
  166. ping_nowriteerr
  167.         ld b,250 ; 250 tries*20ms= about 5s+code execution
  168. ping_loopwait
  169.         push bc
  170.         ld hl,256 ; try to read all buff with trash bytes.
  171.         ld a,(soc1)
  172.         ld ix,icmppacket; Don't worry after icmppacket - buf 256bytes
  173.         ld de,sa_recv
  174.         OS_WIZNETREAD
  175.         pop bc
  176.         ;ld a,h
  177.         ;or l
  178.         bit 7,h
  179.         jr z,ping_loopreceived
  180.         push bc
  181.         ;YIELDGETKEY
  182.         YIELD
  183.         GETKEY_
  184.         ld a,c
  185.         cp key_esc
  186.         jr z,ping_end
  187.         pop bc
  188.         djnz ping_loopwait ; if read zero bytes
  189.         ld hl,(icmperr); timeout
  190.         inc hl
  191.         ld (icmperr),hl ; inc packet loss count
  192.         ld hl,txt_timeout
  193.         call print_hl
  194.         pop bc
  195.         dec bc
  196.         ld a,b
  197.         or c
  198.         jp nz, ping_loop
  199.         jr ping_end ; if tries more than icmpcnt
  200.  
  201. ping_loopreceived
  202.  
  203.         ld ix,icmppacket
  204.         ld hl,(ix+STicmpreq.id)
  205.         ld de,(icmpoldid)
  206.         or a
  207.         sbc hl,de
  208.         jr nz,ping_loopwait
  209.         call icmpchecksum_ixtohl
  210.         inc hl ; checksum of cheksummed packet always 0xFFFF
  211.         ld a,h
  212.         or l
  213.         ld (crc),a
  214.         jr z, ping_nocrc
  215.         ld hl,(icmperr) ; inc packet loss count
  216.         inc hl
  217.         ld (icmperr),hl
  218.         jr ping_crc
  219. ping_nocrc
  220.         ld hl,(icmprcvd)
  221.         inc hl
  222.         ld (icmprcvd),hl
  223. ping_crc
  224.         call ping_printwork
  225.         call ping_wait ; wait for some time
  226.         pop bc
  227.         dec bc
  228.         ld a,b
  229.         or c
  230.         jp nz, ping_loop
  231.  
  232. ping_end
  233.         ld a,(soc1)
  234.         ld E,0
  235.         OS_NETSHUTDOWN
  236.  
  237.         call ping_printstat
  238.  
  239.         QUIT
  240.  
  241.  
  242. ;------------------functions-----------
  243.         include "string.asm"
  244.  
  245. ping_updateminmaxhl
  246.         push hl
  247.         or a
  248.         ld de,(icmpmin)
  249.         sbc hl,de
  250.         pop hl
  251.         jr nc,ping_updateminmaxhl_next
  252.         ld (icmpmin),hl
  253. ping_updateminmaxhl_next
  254.         push hl
  255.         ld de,(icmpmax)
  256.         sbc hl,de
  257.         pop hl
  258.         ret c
  259.         ld (icmpmax),hl
  260.         ret
  261.  
  262. ping_setkey_c
  263.         inc hl
  264.         call skipspaces_hl
  265.         call strtoushort_hltode
  266.         or a
  267.         ret nz
  268.         ld (icmpcnt),de
  269.         ret
  270.  
  271. ping_setkey_i
  272.         inc hl
  273.         call skipspaces_hl
  274.         call strtoushort_hltode
  275.         or a
  276.         ret nz
  277.         ;check
  278.         push hl
  279.         ex hl,de
  280. ;       call printushort_hl
  281. ;       call print_nl
  282.         ld de,20
  283.         sbc hl,de ;<20
  284.         jp c,ping_showhelp
  285.         add hl,de
  286.         ld (icmpdelay),hl
  287.         pop hl
  288.         ret
  289.  
  290. ping_setkey_s
  291.         inc hl
  292.         call skipspaces_hl
  293.         ld de,buf
  294.         call strtobyte_hltode
  295.         or a
  296.         ret nz
  297.         ld de,buf
  298.         ld a,(de)
  299.         ld d,a
  300.         ;check
  301.         sub 56 ;<56
  302.         jp c,ping_showhelp
  303.         add 70 ;>241
  304.         jp c,ping_showhelp
  305.         ld a,d
  306.         ld (icmpdatasize),a
  307.         ret
  308.  
  309. ping_setkey_d
  310.         ld a,1
  311.         ld (icmpshowpacket),a
  312.         ret
  313.  
  314. ping_printstat
  315.  
  316.         ld hl,txt_tail1
  317.         call print_hl
  318.         ld hl,arg_hostname
  319.         call print_hl
  320.         ld hl,txt_tail2
  321.         call print_hl
  322.         ld hl,(icmpnum)
  323.         call printushort_hl
  324.         ld hl,txt_tail3
  325.         call print_hl
  326.         or a
  327.         ld hl,(icmpnum)
  328.         ld de,(icmprcvd)
  329.         sbc hl,de
  330.         ex hl,de
  331.         push de
  332.         call printushort_hl
  333.         ld hl,txt_tail4
  334.         call print_hl
  335.  
  336. ;print % lost
  337.         pop de
  338.         ld h,d
  339.         ld l,e
  340.         add hl,hl
  341.         add hl,de
  342.         add hl,hl
  343.         add hl,hl
  344.         add hl,hl
  345.         add hl,de
  346.         add hl,hl
  347.         add hl,hl ; multiply by 100
  348.         ld a,0xFF
  349.         or a
  350.         ld de,(icmpnum)
  351. ping_printstat0
  352.         inc a
  353.         sbc hl,de
  354.         jr nc,ping_printstat0
  355.         call printbyte_a
  356.         ld hl,txt_tail5
  357.         call print_hl
  358.  
  359. ;print overal time
  360.         YIELD
  361.         OS_GETTIMER ;dehl=timer
  362.         ld de,(icmpstarttime)
  363.         or a
  364.         sbc hl,de
  365.         ld d,h
  366.         ld e,l
  367.         add hl,hl ;multiply by 20ms
  368.         add hl,hl
  369.         add hl,de
  370.         add hl,hl
  371.         add hl,hl
  372.         call printushort_hl
  373.  
  374. ;print rtt
  375.         ld hl,txt_tail6
  376.         call print_hl
  377. ;rtt
  378. ;min
  379.         ld hl,(icmpmin)
  380.         call printushort_hl
  381.         ld a,'/'
  382.         PRCHAR_
  383. ;avg icmppacketstime/(icmpnum-icmperr)
  384.         or a
  385.         ld hl,(icmpnum)
  386.         ld de,(icmperr)
  387.         sbc hl,de
  388.         ex hl,de
  389.         ld hl,(icmppacketstime)
  390.         ld bc,0xFFFF
  391. ping_printstat1
  392.         inc bc
  393.         or a
  394.         sbc hl,de
  395.         jr nc,ping_printstat1
  396.         ld h,b
  397.         ld l,c
  398.         call printushort_hl
  399.         ld a,'/'
  400.         PRCHAR_
  401. ;max
  402.         ld hl,(icmpmax)
  403.         call printushort_hl
  404.         ld hl,txt_tail7
  405.         call print_hl
  406.         ret
  407.  
  408. ping_printpacket_ix
  409.         ld b,16 ; only first 16 bytes
  410. ping_printpacket_ix0
  411.         push bc
  412.         ld a,(ix)
  413.         ld de,buf
  414.         call bytetohexstr_atode
  415.         ld hl,buf
  416.         call print_hl
  417.         push ix
  418.         ld a,' '
  419.         PRCHAR_
  420.         pop ix
  421.         inc ix
  422.         pop bc
  423.         djnz ping_printpacket_ix0
  424.         call print_nl
  425.         ret
  426.  
  427. ping_printwork
  428.         ld hl,txt_work1
  429.         call print_hl
  430.         ld hl,arg_hostname
  431.         call print_hl
  432.         ld a,' '
  433.         PRCHAR_
  434.         ld a,'('
  435.         PRCHAR_
  436.         ld hl,txtip
  437.         call print_hl
  438.         ld hl,txt_work2
  439.         call print_hl
  440.  
  441.         ld hl,txt_crc
  442.         ld a,(crc)
  443.         or a
  444.         jr nz,ping_printwork_crc
  445.         ld a,(icmppacket.num); if no crc print packet num
  446.         ld h,a
  447.         ld a,(icmppacket.num+1)
  448.         ld l,a
  449.         ld de,buf
  450.         call ushorttostr_hltode
  451.         ld hl,buf
  452. ping_printwork_crc
  453.         call print_hl
  454.         ld hl,txt_work3
  455.         call print_hl
  456.         ;YIELD ; update current time in "oldtimer"
  457.         OS_GETTIMER ;dehl=timer
  458.         ld a,(icmppacket.data+6)
  459.         ld d,a
  460.         ld a,(icmppacket.data+7)
  461.         ld e,a
  462.          or a
  463.         sbc hl,de
  464.         ld d,h
  465.         ld e,l
  466.         add hl,hl
  467.         add hl,hl
  468.         add hl,de
  469.         add hl,hl
  470.         add hl,hl; multiply by 20ms
  471.         ex hl,de
  472.         ld hl,(icmppacketstime) ; add to total packet time
  473.         add hl,de
  474.         ld (icmppacketstime),hl
  475.         ex hl,de
  476.         call ping_updateminmaxhl
  477.         call printushort_hl
  478.         ld hl,txt_work4
  479.         call print_hl
  480.         ld a,(icmpshowpacket) ; want to show packet content?
  481.         or a
  482.         ret z
  483.         ld ix,icmppacket
  484.         call ping_printpacket_ix
  485.         ret
  486.  
  487.  
  488. ping_resolveerror
  489.         ld hl,txt_resolveerror
  490.         call print_hl
  491.         ld hl,arg_hostname
  492.         call print_hl
  493.         call print_nl
  494.  
  495. ping_error_hl
  496.         call print_hl
  497.         QUIT
  498.  
  499. ping_wait
  500.         ld bc,(icmpdelay)
  501. ping_wait0
  502.         push bc
  503.         ;YIELDGETKEY ;out: nz=nokey, a=keylang, c=keynolang
  504.         YIELD
  505.         GETKEY_
  506.         ld a,c
  507.         cp key_esc
  508.         jp z,ping_end
  509.         pop hl
  510.         ld de,19
  511.         or a
  512.         sbc hl,de
  513.         push hl
  514.         pop bc
  515.         jr nc,ping_wait0
  516.         ret
  517.  
  518. ping_buildicmppacket
  519.         ld ix,icmppacket
  520.         ld (ix + STicmpreq.type),8
  521.         ld (ix + STicmpreq.code),0
  522.         ld (ix + STicmpreq.checksum),0
  523.         ld (ix + STicmpreq.checksum+1),0
  524.         ld hl,(icmpnextid)
  525.         ld (ix + STicmpreq.id),hl
  526.         ld (icmpoldid),hl
  527.         ld hl,(icmpnum)
  528.         inc hl
  529.         ld (icmpnum),hl
  530.         ld (ix + STicmpreq.num),h
  531.         ld (ix + STicmpreq.num+1),l
  532.         OS_GETTIMER ;dehl=timer
  533.         ld (ix + STicmpreq.data),h
  534.         ld (ix + STicmpreq.data+1),l
  535.         ld (ix + STicmpreq.data+2),h
  536.         ld (ix + STicmpreq.data+3),l
  537.         ld (ix + STicmpreq.data+4),h
  538.         ld (ix + STicmpreq.data+5),l
  539.         ld (ix + STicmpreq.data+6),h
  540.         ld (ix + STicmpreq.data+7),l
  541.         call icmpchecksum_ixtohl
  542.         ld (icmpnextid),hl
  543.         ld (ix + STicmpreq.checksum),h
  544.         ld (ix + STicmpreq.checksum+1),l
  545.         ret
  546.  
  547. icmpchecksum_ixtohl
  548.         push ix
  549.         ld hl,(icmpdatasize)
  550.         ld de,8 ; header
  551.         add hl,de
  552.         srl h
  553.         rr l ; divide by 2
  554.         ld b,l; words
  555.         ld hl,0
  556.         or a
  557. icmpchecksum_loop
  558.         ld d, (ix)
  559.         ld e, (ix+1)
  560.         adc hl,de
  561.         inc ix
  562.         inc ix
  563.         djnz icmpchecksum_loop
  564.         ex hl,de
  565.         ld hl,0
  566.         scf
  567.         sbc hl,de
  568.         pop ix
  569.         ld a,h
  570.         cp l
  571.         ret nz
  572.         ld hl,0xffff
  573.         ret
  574.  
  575. ping_iptostr_hltode
  576.         call bytetostr_hltode
  577.         ld a, '.'
  578.         ld (de), a
  579.         inc de
  580.         call bytetostr_hltode
  581.         ld a, '.'
  582.         ld (de), a
  583.         inc de
  584.         call bytetostr_hltode
  585.         ld a, '.'
  586.         ld (de), a
  587.         inc de
  588.         call bytetostr_hltode
  589.         ret
  590.  
  591. ping_showusage
  592.         ld hl,txt_usage
  593.         call print_hl
  594.         QUIT
  595.  
  596. ping_showversion
  597.         ld hl,txt_version
  598.         call print_hl
  599.         QUIT
  600.  
  601. ping_showhelp
  602.         ld hl,txt_usage
  603.         call print_hl
  604.         ld hl,txt_help
  605.         call print_hl
  606.         QUIT
  607.  
  608. dns_resolver            ;DE-domain name
  609. dns_err_loop
  610.         push de
  611.         ld hl,dns_head
  612.         ld de,buf
  613.         ld bc,6
  614.         ldir
  615.         ex de,hl
  616.         ld de,buf+7
  617.         ld (hl),b
  618.         ld  c,256-7
  619.         ldir
  620.         ld de,buf+12
  621.         ld h,d
  622.         ld l,e
  623.         pop bc
  624. name_loop
  625.         inc hl
  626.         ld a,(bc)
  627.         ld (hl),a
  628.         inc bc
  629.         cp '.'
  630.         jr z,is_dot
  631.         or a
  632.         jr nz,name_loop
  633. is_dot
  634.         sbc hl,de
  635.         ex de,hl
  636.         dec e
  637.         ld (hl),e
  638.         inc e
  639.         add hl,de
  640.         ld d,h
  641.         ld e,l
  642.         or a
  643.         jr nz,name_loop
  644.         inc a
  645.         inc hl
  646.         inc hl
  647.         ld (hl),a
  648.         inc hl
  649.         inc hl
  650.         ld (hl),a
  651.         inc hl
  652.         push hl
  653. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  654.         ld a, (dns_ia2)
  655.         cp 0
  656.         jp nz, skipgetdns
  657.         ld de, dns_ia2;DE= ptr to DNS buffer(4 bytes)
  658.         OS_GETDNS
  659. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
  660. skipgetdns:    
  661.         ld de,0x0203
  662.         OS_NETSOCKET
  663.         ld a,l
  664.         ld (soc1),a
  665.         or a
  666.         jp m,dns_exiterr
  667.         ;LD DE,conparam
  668.         ;OS_NETCONNECT
  669.         ;ld a,l
  670.         ;or a
  671.         ;jp m,dns_exiterr
  672.        
  673.         pop hl
  674.         push hl
  675.         ld de,0xffff&(-buf)
  676.         add hl,de
  677.         LD a,(soc1)
  678.         LD IX,buf
  679.         LD DE,conparam
  680.         OS_WIZNETWRITE
  681.         bit 7,h
  682.         jr nz,dns_exitcode
  683. dns_err_count=$+1
  684.         ld b,25
  685.         jr recv_wait1
  686. recv_wait
  687.         push bc
  688.         YIELD
  689.         pop bc
  690. recv_wait1
  691.         push bc
  692.         ld hl,256
  693.         LD a,(soc1)
  694.         LD ix,buf
  695.         ld de,sa_recv
  696.         OS_WIZNETREAD
  697.         pop bc
  698.         ;ld a,h
  699.         ;or l
  700.         bit 7,h
  701.         jr z,recv_wait_end
  702.         djnz recv_wait
  703.         jr dns_exiterr
  704. recv_wait_end
  705.         bit 7,h
  706.         jr nz,dns_exitcode
  707.         ld a,(buf+3)
  708.         and 0x0f
  709.         jr nz,dns_exiterr
  710. dns_exitcode
  711.         LD a,(soc1)
  712.         LD E,0
  713.         OS_NETSHUTDOWN
  714.         pop hl
  715. reqpars_l
  716.         inc hl ; Skip compressed
  717.         inc hl ; name
  718.         inc hl ; Type
  719.         ld a,(hl) ; of message
  720.         ld de,7 ; Skip
  721.         add hl,de ; Class , TTL
  722.         ld b,(hl) ; RDLENGTH
  723.         inc hl
  724.         ld c,(hl)
  725.         inc hl
  726.         dec a
  727.         ret z   ; If TYPE was 0x1 (IP) exit
  728.         cp 4
  729.         jr nz,exiterr1 ; If TYPE was not 0x5 (CNAME) error
  730.         add hl,bc ; to next message
  731.         jr reqpars_l
  732. dns_exiterr
  733.         pop af
  734.         LD a,(soc1)
  735.         LD E,0
  736.         OS_NETSHUTDOWN
  737.         ld a,(dns_err_count)
  738.         add a,a
  739.         ld (dns_err_count),a
  740.         jp nc,dns_err_loop
  741. exiterr1
  742.         ld hl,0
  743.         ret
  744.  
  745. ping_printcrc
  746.         ld hl,txt_crc
  747.         call print_hl
  748.         call print_nl
  749.         ret
  750.  
  751.  
  752.         STRUCT STicmpreq
  753. type            BYTE
  754. code            BYTE
  755. checksum        WORD
  756. id              WORD
  757. num             WORD
  758. data            ds 8
  759.         ENDS
  760.  
  761. soc1            db 0
  762. dns_head        db 0x11,0x22,0x01,0x00,0x00,0x01
  763. conparam        db 0,0,53
  764. dns_ia2
  765.                         db 0,0,0,0
  766. sa_recv         defs 7
  767. icmppacket      STicmpreq
  768. buf             ds 255
  769. ip              ds 4
  770. txtip           db 0,0,0,'.',0,0,0,'.',0,0,0,'.',0,0,0,0
  771.  
  772. icmpdatasize db 56,0
  773. icmpnum db 0,0
  774. icmpcnt db 0xFF,0xFF
  775. icmpnextid db 0x53,0x53
  776. icmpoldid db 0,0
  777. icmperr db 0,0
  778. icmprcvd db 0,0
  779. icmpstarttime db 0,0
  780. icmppacketstime db 0,0
  781. icmpshowpacket db 0
  782. icmpdelay db 0xE8,0x03 ;1000ms
  783. icmpmin db 0xFF,0xFF
  784. icmpmax db 0,0
  785. crc db 0
  786.  
  787. ;oldtimer ds 2
  788. arg_hostname ds 255
  789.  
  790. txt_usage db "Use ping [-c count] [-d] [-h] [-i interval] [-s size] [-V] <host_name|ip>",0x0D,0x0A,0
  791. txt_help  
  792.           db "   -c count : Stop after sending count (1-65535) packets. Default 65535",0x0D,0x0A
  793.           db "         -d : Print first 16 bytes icmp packet to send",0x0D,0x0A
  794.           db "         -h : Show this help and exit",0x0D,0x0A
  795.           db "-i interval : Wait interval between sending each packet. Min 20, max 65535.",0x0d,0x0a
  796.           db "             Default 1000ms",0x0D,0x0A
  797.           db "    -s size : Specifies the number of data bytes to send. Min 56 (default), ",0x0d,0x0a
  798.           db "             max 241",0x0D,0x0A
  799.           db "         -V : Show version info and exit",0x0D,0x0A,0
  800. txt_version db "Ping v0.1",0x0d,0x0a,"Nedopc group 2019",0x0d,0x0a,0
  801. txt_head1 db "PING ",0
  802. txt_head2 db " (",0
  803. txt_head3 db ") ",0
  804. txt_head4 db " bytes of data.",0x0D,0x0A,0
  805. txt_resolveerror db "Can not resolve ",0
  806. txt_socketerror db "IP socket creation error",0x0D,0x0A,0
  807. txt_socketopenerror db "IP socket opening error",0x0D,0x0A,0
  808. txt_writeerror db "Something wrong with write",0x0D,0x0A,0
  809. txt_crc db "CRC",0
  810. txt_timeout db " timeout",0x0D,0x0A,0
  811. txt_work1 db "Echo from ",0
  812. txt_work2 db "): icmp_seq=",0
  813. txt_work3 db " time=",0
  814. txt_work4 db " ms",0x0D,0x0A,0
  815. txt_tail1 db "--- ",0
  816. txt_tail2 db " ping statistics ---",0x0D,0x0A,0
  817. txt_tail3 db " packets transmitted, ",0
  818. txt_tail4 db " received, ",0
  819. txt_tail5 db "% packet loss, time ",0
  820. txt_tail6 db " ms",0x0D,0x0A,"rtt min/avg/max = ",0
  821. txt_tail7 db " ms",0x0D,0x0A,0
  822.  
  823.         include "../_sdk/stdio.asm"
  824.  
  825. cmd_end
  826.         display "Size ",/d,cmd_end-cmd_begin," bytes"
  827.         savebin "ping.com",cmd_begin,cmd_end-cmd_begin
  828.  
  829.         LABELSLIST "../../us/user.l"
  830.