/* This code is NOT from Berkley, but FROM ME :-) Very stupid Arexx ping. Don't use it to ping localhost or you would ROTFL. */ parse arg host . if ~ReadArgs("HOST/A,SIZE/K/N,NUM/K/N,QUICK/S") then do call PrintFault(IoErr(),ProgramName()) exit end host = parm.0.value if parm.1.flag then if parm.1.value>7 then dataSize=parm.1.value else call err("bad SIZE number") else dataSize=56 if parm.2.flag then if parm.2.value>0 then numPkt=parm.2.value else call err("bad NUM number") else numPkt=1E10 if parm.3.flag then wait=0 else wait=1 break=0 signal on BREAK_C addr=resolve(host) if addr=="-1" then do call err("HOST not found") exit end sock=socket("INET","RAW","ICMP") if sock<0 then do call err("no socket") exit end call IOCtlSocket(sock,"FIONBIO",1) sin.addrFamily="INET" sin.addrAddr=addr sin.addrPort=0 ourID=right(x2c(pragma("ID")),2) min=1E10 max=0 avg=0 nrec=0 ntrans=0 t=CreateTimer() timSig=TimerSignal(t) if numPkt==1E10 then ps="" else ps="NUM:" numPkt say Upper(ProgramName()) "HOST:" host "SIZE:" dataSize ps call StartTimer(t,wait) call sendPacket(dataSize) sel.read.0=sock go=ntransmax then max=time if timenrec & max>0 then do res=WaitSelect("SEL",5) if res~=0 then call readPacket end if ntrans==0 then loss=100 else loss=(ntrans-nrec)/ntrans*100 say say "---" host "ping statistics ---" say ntrans "packets transmitted," nrec "packets received," loss"% packet loss" if nrec>0 then say "round-trip min/avg/max =" min"/"avg/nrec"/"max "ms" exit