%include "Moose:Mouse.Inc" %include "INet:INet.Inc" %include "INet:INetaddrs" %externalpredicatespec FS lookup(%string(31) what, %integername value) %systemroutinespec phex(%integer x) {} %routine print INet address(%integer addr) {} write(addr >> 24 & 255, 0); print symbol('.') {} write(addr >> 16 & 255, 0); print symbol('.') {} write(addr >> 8 & 255, 0); print symbol('.') {} write(addr & 255, 0) {} %end %begin %ownrecord(semaphore fm) s = 0 %ownrecord(mailbox fm) m = 0 %record(mailbox fm)%name i %ownrecord(INet user request fm) r = 0 %record(INet user request fm)%name reply %string(31) target %integer x, a setup semaphore(s) setup mailbox(m, s) setup message(r, size of(r)) %if FS lookup(INet mailbox name, x) %start i == record(x) !! printstring("INet mailbox at "); phex(addr(i)); newline %else printstring("No INet mailbox?"); newline %stop %finish r_code = ICMP timestamp request target = CLI param %if target = "" %start prompt("Target: "); read(target) %finish a = INet name to address(target) %if a = 0 %start printstring(target); printstring(" unknown") newline %stop %finish {} printstring(target); printstring(" is at ") {} print INet address(a); newline r_buffer == byteinteger(addr(a)) r_bytes = 4 send message(r, i, m) reply == receive message(m) printstring("Ping status: "); write(reply_status, 0) newline %end %of %program