Subversion Repositories NedoOS

Rev

Rev 592 | Go to most recent revision | 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 de,0x0203
  655.         OS_NETSOCKET
  656.         ld a,l
  657.         ld (soc1),a
  658.         or a
  659.         jp m,dns_exiterr
  660.         ;LD DE,conparam
  661.         ;OS_NETCONNECT
  662.         ;ld a,l
  663.         ;or a
  664.         ;jp m,dns_exiterr
  665.        
  666.         pop hl
  667.         push hl
  668.         ld de,0xffff&(-buf)
  669.         add hl,de
  670.         LD a,(soc1)
  671.         LD IX,buf
  672.         LD DE,conparam
  673.         OS_WIZNETWRITE
  674.         bit 7,h
  675.         jr nz,dns_exitcode
  676. dns_err_count=$+1
  677.         ld b,25
  678.         jr recv_wait1
  679. recv_wait
  680.         push bc
  681.         YIELD
  682.         pop bc
  683. recv_wait1
  684.         push bc
  685.         ld hl,256
  686.         LD a,(soc1)
  687.         LD ix,buf
  688.         ld de,sa_recv
  689.         OS_WIZNETREAD
  690.         pop bc
  691.         ;ld a,h
  692.         ;or l
  693.         bit 7,h
  694.         jr z,recv_wait_end
  695.         djnz recv_wait
  696.         jr dns_exiterr
  697. recv_wait_end
  698.         bit 7,h
  699.         jr nz,dns_exitcode
  700.         ld a,(buf+3)
  701.         and 0x0f
  702.         jr nz,dns_exiterr
  703. dns_exitcode
  704.         LD a,(soc1)
  705.         LD E,0
  706.         OS_NETSHUTDOWN
  707.         pop hl
  708. reqpars_l
  709.         inc hl ; Skip compressed
  710.         inc hl ; name
  711.         inc hl ; Type
  712.         ld a,(hl) ; of message
  713.         ld de,7 ; Skip
  714.         add hl,de ; Class , TTL
  715.         ld b,(hl) ; RDLENGTH
  716.         inc hl
  717.         ld c,(hl)
  718.         inc hl
  719.         dec a
  720.         ret z   ; If TYPE was 0x1 (IP) exit
  721.         cp 4
  722.         jr nz,exiterr1 ; If TYPE was not 0x5 (CNAME) error
  723.         add hl,bc ; to next message
  724.         jr reqpars_l
  725. dns_exiterr
  726.         pop af
  727.         LD a,(soc1)
  728.         LD E,0
  729.         OS_NETSHUTDOWN
  730.         ld a,(dns_err_count)
  731.         add a,a
  732.         ld (dns_err_count),a
  733.         jp nc,dns_err_loop
  734. exiterr1
  735.         ld hl,0
  736.         ret
  737.  
  738. ping_printcrc
  739.         ld hl,txt_crc
  740.         call print_hl
  741.         call print_nl
  742.         ret
  743.  
  744.  
  745.         STRUCT STicmpreq
  746. type            BYTE
  747. code            BYTE
  748. checksum        WORD
  749. id              WORD
  750. num             WORD
  751. data            ds 8
  752.         ENDS
  753.  
  754. soc1            db 0
  755. dns_head        db 0x11,0x22,0x01,0x00,0x00,0x01
  756. conparam        db 0,0,53,8,8,8,8
  757. sa_recv         defs 7
  758. icmppacket      STicmpreq
  759. buf             ds 255
  760. ip              ds 4
  761. txtip           db 0,0,0,'.',0,0,0,'.',0,0,0,'.',0,0,0,0
  762.  
  763. icmpdatasize db 56,0
  764. icmpnum db 0,0
  765. icmpcnt db 0xFF,0xFF
  766. icmpnextid db 0x53,0x53
  767. icmpoldid db 0,0
  768. icmperr db 0,0
  769. icmprcvd db 0,0
  770. icmpstarttime db 0,0
  771. icmppacketstime db 0,0
  772. icmpshowpacket db 0
  773. icmpdelay db 0xE8,0x03 ;1000ms
  774. icmpmin db 0xFF,0xFF
  775. icmpmax db 0,0
  776. crc db 0
  777.  
  778. ;oldtimer ds 2
  779. arg_hostname ds 255
  780.  
  781. txt_usage db "Use ping [-c count] [-d] [-h] [-i interval] [-s size] [-V] <host_name|ip>",0x0D,0x0A,0
  782. txt_help  
  783.           db "   -c count : Stop after sending count (1-65535) packets. Default 65535",0x0D,0x0A
  784.           db "         -d : Print first 16 bytes icmp packet to send",0x0D,0x0A
  785.           db "         -h : Show this help and exit",0x0D,0x0A
  786.           db "-i interval : Wait interval between sending each packet. Min 20, max 65535.",0x0d,0x0a
  787.           db "             Default 1000ms",0x0D,0x0A
  788.           db "    -s size : Specifies the number of data bytes to send. Min 56 (default), ",0x0d,0x0a
  789.           db "             max 241",0x0D,0x0A
  790.           db "         -V : Show version info and exit",0x0D,0x0A,0
  791. txt_version db "Ping v0.1",0x0d,0x0a,"Nedopc group 2019",0x0d,0x0a,0
  792. txt_head1 db "PING ",0
  793. txt_head2 db " (",0
  794. txt_head3 db ") ",0
  795. txt_head4 db " bytes of data.",0x0D,0x0A,0
  796. txt_resolveerror db "Can not resolve ",0
  797. txt_socketerror db "IP socket creation error",0x0D,0x0A,0
  798. txt_socketopenerror db "IP socket opening error",0x0D,0x0A,0
  799. txt_writeerror db "Something wrong with write",0x0D,0x0A,0
  800. txt_crc db "CRC",0
  801. txt_timeout db " timeout",0x0D,0x0A,0
  802. txt_work1 db "Echo from ",0
  803. txt_work2 db "): icmp_seq=",0
  804. txt_work3 db " time=",0
  805. txt_work4 db " ms",0x0D,0x0A,0
  806. txt_tail1 db "--- ",0
  807. txt_tail2 db " ping statistics ---",0x0D,0x0A,0
  808. txt_tail3 db " packets transmitted, ",0
  809. txt_tail4 db " received, ",0
  810. txt_tail5 db "% packet loss, time ",0
  811. txt_tail6 db " ms",0x0D,0x0A,"rtt min/avg/max = ",0
  812. txt_tail7 db " ms",0x0D,0x0A,0
  813.  
  814.         include "../_sdk/stdio.asm"
  815.  
  816. cmd_end
  817.         display "Size ",/d,cmd_end-cmd_begin," bytes"
  818.         savebin "ping.com",cmd_begin,cmd_end-cmd_begin
  819.  
  820.         LABELSLIST "../../us/user.l"
  821.