?login_element?

Subversion Repositories NedoOS

Rev

Rev 409 | 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.         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 ;hlde=timer
  362.         ld hl,(icmpstarttime)
  363.         ex de,hl
  364.         or a
  365.         sbc hl,de
  366.         ld d,h
  367.         ld e,l
  368.         add hl,hl ;multiply by 20ms
  369.         add hl,hl
  370.         add hl,de
  371.         add hl,hl
  372.         add hl,hl
  373.         call printushort_hl
  374.  
  375. ;print rtt
  376.         ld hl,txt_tail6
  377.         call print_hl
  378. ;rtt
  379. ;min
  380.         ld hl,(icmpmin)
  381.         call printushort_hl
  382.         ld a,'/'
  383.         PRCHAR_
  384. ;avg icmppacketstime/(icmpnum-icmperr)
  385.         or a
  386.         ld hl,(icmpnum)
  387.         ld de,(icmperr)
  388.         sbc hl,de
  389.         ex hl,de
  390.         ld hl,(icmppacketstime)
  391.         ld bc,0xFFFF
  392. ping_printstat1
  393.         inc bc
  394.         or a
  395.         sbc hl,de
  396.         jr nc,ping_printstat1
  397.         ld h,b
  398.         ld l,c
  399.         call printushort_hl
  400.         ld a,'/'
  401.         PRCHAR_
  402. ;max
  403.         ld hl,(icmpmax)
  404.         call printushort_hl
  405.         ld hl,txt_tail7
  406.         call print_hl
  407.         ret
  408.  
  409. ping_printpacket_ix
  410.         ld b,16 ; only first 16 bytes
  411. ping_printpacket_ix0
  412.         push bc
  413.         ld a,(ix)
  414.         ld de,buf
  415.         call bytetohexstr_atode
  416.         ld hl,buf
  417.         call print_hl
  418.         push ix
  419.         ld a,' '
  420.         PRCHAR_
  421.         pop ix
  422.         inc ix
  423.         pop bc
  424.         djnz ping_printpacket_ix0
  425.         call print_nl
  426.         ret
  427.  
  428. ping_printwork
  429.         ld hl,txt_work1
  430.         call print_hl
  431.         ld hl,arg_hostname
  432.         call print_hl
  433.         ld a,' '
  434.         PRCHAR_
  435.         ld a,'('
  436.         PRCHAR_
  437.         ld hl,txtip
  438.         call print_hl
  439.         ld hl,txt_work2
  440.         call print_hl
  441.  
  442.         ld hl,txt_crc
  443.         ld a,(crc)
  444.         or a
  445.         jr nz,ping_printwork_crc
  446.         ld a,(icmppacket.num); if no crc print packet num
  447.         ld h,a
  448.         ld a,(icmppacket.num+1)
  449.         ld l,a
  450.         ld de,buf
  451.         call ushorttostr_hltode
  452.         ld hl,buf
  453. ping_printwork_crc
  454.         call print_hl
  455.         ld hl,txt_work3
  456.         call print_hl
  457.         ;YIELD ; update current time in "oldtimer"
  458.         OS_GETTIMER ;hlde=timer
  459.         ex de,hl
  460.         ld a,(icmppacket.data+6)
  461.         ld d,a
  462.         ld a,(icmppacket.data+7)
  463.         ld e,a
  464.          or a
  465.         sbc hl,de
  466.         ld d,h
  467.         ld e,l
  468.         add hl,hl
  469.         add hl,hl
  470.         add hl,de
  471.         add hl,hl
  472.         add hl,hl; multiply by 20ms
  473.         ex hl,de
  474.         ld hl,(icmppacketstime) ; add to total packet time
  475.         add hl,de
  476.         ld (icmppacketstime),hl
  477.         ex hl,de
  478.         call ping_updateminmaxhl
  479.         call printushort_hl
  480.         ld hl,txt_work4
  481.         call print_hl
  482.         ld a,(icmpshowpacket) ; want to show packet content?
  483.         or a
  484.         ret z
  485.         ld ix,icmppacket
  486.         call ping_printpacket_ix
  487.         ret
  488.  
  489.  
  490. ping_resolveerror
  491.         ld hl,txt_resolveerror
  492.         call print_hl
  493.         ld hl,arg_hostname
  494.         call print_hl
  495.         call print_nl
  496.  
  497. ping_error_hl
  498.         call print_hl
  499.         QUIT
  500.  
  501. ping_wait
  502.         ld bc,(icmpdelay)
  503. ping_wait0
  504.         push bc
  505.         ;YIELDGETKEY ;out: nz=nokey, a=keylang, c=keynolang
  506.         YIELD
  507.         GETKEY_
  508.         ld a,c
  509.         cp key_esc
  510.         jp z,ping_end
  511.         pop hl
  512.         ld de,19
  513.         or a
  514.         sbc hl,de
  515.         push hl
  516.         pop bc
  517.         jr nc,ping_wait0
  518.         ret
  519.  
  520. ping_buildicmppacket
  521.         ld ix,icmppacket
  522.         ld (ix + STicmpreq.type),8
  523.         ld (ix + STicmpreq.code),0
  524.         ld (ix + STicmpreq.checksum),0
  525.         ld (ix + STicmpreq.checksum+1),0
  526.         ld hl,(icmpnextid)
  527.         ld (ix + STicmpreq.id),hl
  528.         ld (icmpoldid),hl
  529.         ld hl,(icmpnum)
  530.         inc hl
  531.         ld (icmpnum),hl
  532.         ld (ix + STicmpreq.num),h
  533.         ld (ix + STicmpreq.num+1),l
  534.         OS_GETTIMER ;hlde=timer
  535.         ex de,hl
  536.         ld (ix + STicmpreq.data),h
  537.         ld (ix + STicmpreq.data+1),l
  538.         ld (ix + STicmpreq.data+2),h
  539.         ld (ix + STicmpreq.data+3),l
  540.         ld (ix + STicmpreq.data+4),h
  541.         ld (ix + STicmpreq.data+5),l
  542.         ld (ix + STicmpreq.data+6),h
  543.         ld (ix + STicmpreq.data+7),l
  544.         call icmpchecksum_ixtohl
  545.         ld (icmpnextid),hl
  546.         ld (ix + STicmpreq.checksum),h
  547.         ld (ix + STicmpreq.checksum+1),l
  548.         ret
  549.  
  550. icmpchecksum_ixtohl
  551.         push ix
  552.         ld hl,(icmpdatasize)
  553.         ld de,8 ; header
  554.         add hl,de
  555.         srl h
  556.         rr l ; divide by 2
  557.         ld b,l; words
  558.         ld hl,0
  559.         or a
  560. icmpchecksum_loop
  561.         ld d, (ix)
  562.         ld e, (ix+1)
  563.         adc hl,de
  564.         inc ix
  565.         inc ix
  566.         djnz icmpchecksum_loop
  567.         ex hl,de
  568.         ld hl,0
  569.         scf
  570.         sbc hl,de
  571.         pop ix
  572.         ld a,h
  573.         cp l
  574.         ret nz
  575.         ld hl,0xffff
  576.         ret
  577.  
  578. ping_iptostr_hltode
  579.         call bytetostr_hltode
  580.         ld a, '.'
  581.         ld (de), a
  582.         inc de
  583.         call bytetostr_hltode
  584.         ld a, '.'
  585.         ld (de), a
  586.         inc de
  587.         call bytetostr_hltode
  588.         ld a, '.'
  589.         ld (de), a
  590.         inc de
  591.         call bytetostr_hltode
  592.         ret
  593.  
  594. ping_showusage
  595.         ld hl,txt_usage
  596.         call print_hl
  597.         QUIT
  598.  
  599. ping_showversion
  600.         ld hl,txt_version
  601.         call print_hl
  602.         QUIT
  603.  
  604. ping_showhelp
  605.         ld hl,txt_usage
  606.         call print_hl
  607.         ld hl,txt_help
  608.         call print_hl
  609.         QUIT
  610.  
  611. dns_resolver            ;DE-domain name
  612. dns_err_loop
  613.         push de
  614.         ld hl,dns_head
  615.         ld de,buf
  616.         ld bc,6
  617.         ldir
  618.         ex de,hl
  619.         ld de,buf+7
  620.         ld (hl),b
  621.         ld  c,256-7
  622.         ldir
  623.         ld de,buf+12
  624.         ld h,d
  625.         ld l,e
  626.         pop bc
  627. name_loop
  628.         inc hl
  629.         ld a,(bc)
  630.         ld (hl),a
  631.         inc bc
  632.         cp '.'
  633.         jr z,is_dot
  634.         or a
  635.         jr nz,name_loop
  636. is_dot
  637.         sbc hl,de
  638.         ex de,hl
  639.         dec e
  640.         ld (hl),e
  641.         inc e
  642.         add hl,de
  643.         ld d,h
  644.         ld e,l
  645.         or a
  646.         jr nz,name_loop
  647.         inc a
  648.         inc hl
  649.         inc hl
  650.         ld (hl),a
  651.         inc hl
  652.         inc hl
  653.         ld (hl),a
  654.         inc hl
  655.         push hl
  656.        
  657.         ld de,0x0203
  658.         OS_NETSOCKET
  659.         ld a,l
  660.         ld (soc1),a
  661.         or a
  662.         jp m,dns_exiterr
  663.         ;LD DE,conparam
  664.         ;OS_NETCONNECT
  665.         ;ld a,l
  666.         ;or a
  667.         ;jp m,dns_exiterr
  668.        
  669.         pop hl
  670.         push hl
  671.         ld de,0xffff&(-buf)
  672.         add hl,de
  673.         LD a,(soc1)
  674.         LD IX,buf
  675.         LD DE,conparam
  676.         OS_WIZNETWRITE
  677.         bit 7,h
  678.         jr nz,dns_exitcode
  679. dns_err_count=$+1
  680.         ld b,25
  681.         jr recv_wait1
  682. recv_wait
  683.         push bc
  684.         YIELD
  685.         pop bc
  686. recv_wait1
  687.         push bc
  688.         ld hl,256
  689.         LD a,(soc1)
  690.         LD ix,buf
  691.         ld de,sa_recv
  692.         OS_WIZNETREAD
  693.         pop bc
  694.         ;ld a,h
  695.         ;or l
  696.         bit 7,h
  697.         jr z,recv_wait_end
  698.         djnz recv_wait
  699.         jr dns_exiterr
  700. recv_wait_end
  701.         bit 7,h
  702.         jr nz,dns_exitcode
  703.         ld a,(buf+3)
  704.         and 0x0f
  705.         jr nz,dns_exiterr
  706. dns_exitcode
  707.         LD a,(soc1)
  708.         LD E,0
  709.         OS_NETSHUTDOWN
  710.         pop hl
  711. reqpars_l
  712.         inc hl ; Skip compressed
  713.         inc hl ; name
  714.         inc hl ; Type
  715.         ld a,(hl) ; of message
  716.         ld de,7 ; Skip
  717.         add hl,de ; Class , TTL
  718.         ld b,(hl) ; RDLENGTH
  719.         inc hl
  720.         ld c,(hl)
  721.         inc hl
  722.         dec a
  723.         ret z   ; If TYPE was 0x1 (IP) exit
  724.         cp 4
  725.         jr nz,exiterr1 ; If TYPE was not 0x5 (CNAME) error
  726.         add hl,bc ; to next message
  727.         jr reqpars_l
  728. dns_exiterr
  729.         pop af
  730.         LD a,(soc1)
  731.         LD E,0
  732.         OS_NETSHUTDOWN
  733.         ld a,(dns_err_count)
  734.         add a,a
  735.         ld (dns_err_count),a
  736.         jp nc,dns_err_loop
  737. exiterr1
  738.         ld hl,0
  739.         ret
  740.  
  741. ping_printcrc
  742.         ld hl,txt_crc
  743.         call print_hl
  744.         call print_nl
  745.         ret
  746.  
  747.  
  748.         STRUCT STicmpreq
  749. type            BYTE
  750. code            BYTE
  751. checksum        WORD
  752. id              WORD
  753. num             WORD
  754. data            ds 8
  755.         ENDS
  756.  
  757. soc1            db 0
  758. dns_head        db 0x11,0x22,0x01,0x00,0x00,0x01
  759. conparam        db 0,0,53,8,8,8,8
  760. sa_recv         defs 7
  761. icmppacket      STicmpreq
  762. buf             ds 255
  763. ip              ds 4
  764. txtip           db 0,0,0,'.',0,0,0,'.',0,0,0,'.',0,0,0,0
  765.  
  766. icmpdatasize db 56,0
  767. icmpnum db 0,0
  768. icmpcnt db 0xFF,0xFF
  769. icmpnextid db 0x53,0x53
  770. icmpoldid db 0,0
  771. icmperr db 0,0
  772. icmprcvd db 0,0
  773. icmpstarttime db 0,0
  774. icmppacketstime db 0,0
  775. icmpshowpacket db 0
  776. icmpdelay db 0xE8,0x03 ;1000ms
  777. icmpmin db 0xFF,0xFF
  778. icmpmax db 0,0
  779. crc db 0
  780.  
  781. ;oldtimer ds 2
  782. arg_hostname ds 255
  783.  
  784. txt_usage db "Use ping [-c count] [-d] [-h] [-i interval] [-s size] [-V] <host_name|ip>",0x0D,0x0A,0
  785. txt_help  
  786.           db "   -c count : Stop after sending count (1-65535) packets. Default 65535",0x0D,0x0A
  787.           db "         -d : Print first 16 bytes icmp packet to send",0x0D,0x0A
  788.           db "         -h : Show this help and exit",0x0D,0x0A
  789.           db "-i interval : Wait interval between sending each packet. Min 20, max 65535.",0x0d,0x0a
  790.           db "             Default 1000ms",0x0D,0x0A
  791.           db "    -s size : Specifies the number of data bytes to send. Min 56 (default), ",0x0d,0x0a
  792.           db "             max 241",0x0D,0x0A
  793.           db "         -V : Show version info and exit",0x0D,0x0A,0
  794. txt_version db "Ping v0.1",0x0d,0x0a,"Nedopc group 2019",0x0d,0x0a,0
  795. txt_head1 db "PING ",0
  796. txt_head2 db " (",0
  797. txt_head3 db ") ",0
  798. txt_head4 db " bytes of data.",0x0D,0x0A,0
  799. txt_resolveerror db "Can not resolve ",0
  800. txt_socketerror db "IP socket creation error",0x0D,0x0A,0
  801. txt_socketopenerror db "IP socket opening error",0x0D,0x0A,0
  802. txt_writeerror db "Something wrong with write",0x0D,0x0A,0
  803. txt_crc db "CRC",0
  804. txt_timeout db " timeout",0x0D,0x0A,0
  805. txt_work1 db "Echo from ",0
  806. txt_work2 db "): icmp_seq=",0
  807. txt_work3 db " time=",0
  808. txt_work4 db " ms",0x0D,0x0A,0
  809. txt_tail1 db "--- ",0
  810. txt_tail2 db " ping statistics ---",0x0D,0x0A,0
  811. txt_tail3 db " packets transmitted, ",0
  812. txt_tail4 db " received, ",0
  813. txt_tail5 db "% packet loss, time ",0
  814. txt_tail6 db " ms",0x0D,0x0A,"rtt min/avg/max = ",0
  815. txt_tail7 db " ms",0x0D,0x0A,0
  816.  
  817.         include "../_sdk/stdio.asm"
  818.  
  819. cmd_end
  820.         display "Size ",/d,cmd_end-cmd_begin," bytes"
  821.         savebin "ping.com",cmd_begin,cmd_end-cmd_begin
  822.  
  823.         LABELSLIST "../../us/user.l"
  824.