%systemroutinespec phex(%integer x) %externalpredicatespec FS lookup(%string(31) what, %integername value) %constinteger route slots = 32 %recordformat route fm(%integer network, mask, gateway, metric, stamp, via) %recordformat route table fm(%record(route fm)%array e(1 : route slots)) %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 %record(route table fm)%name t %record(route fm)%name e %integer x %if FS lookup("INET_ROUTE_TABLE", x) %start t == record(x) %else printstring("No route table."); newline %stop %finish %for x = 1, 1, route slots %cycle e == t_e(x) %if e_metric > 0 %start write(x, 2); printstring(": net "); print INet address(e_network) printstring(" mask "); phex(e_mask) %if e_gateway = 0 %start printstring(" direct") %else printstring(" gateway "); print INet address(e_gateway) %finish %if e_metric >= 16 %start %if e_metric < 32 %then printstring(" moribund") %c %else printstring(" dead") %else printstring(" metric "); write(e_metric, 0) %finish printstring(" via ") %if e_via = 1 %start printstring("slow") %else %if e_via = 2 printstring("fast") %else write(e_via, 0); print symbol('?') %finish newline %finish %repeat %end %of %program