?login_element?

Subversion Repositories NedoOS

Rev

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

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