! INet name/address conversion %conststring(31) database = "INet:INetAddrs.Dat" %systemroutinespec INet phex %alias "phex" (%integer x) ! Useful procedures %routine read address(%integername a) %integer n ! Skip comments %cycle %exit %unless next symbol = '#' skip symbol %while next symbol # NL; skip symbol %repeat ! Read the address a = 0 read(n) %while next symbol = '.' %cycle skip symbol a = a << 8 ! n read(n) %repeat a = a << 8 ! n %end %routine read name(%string(*)%name name) %integer ch name = "" ! Skip blank space skip symbol %while next symbol <= ' ' %and next symbol # NL ! Comment or end of line? %return %if next symbol = '#' %or next symbol = NL ! Read the name %cycle ch = next symbol %return %if ch <= ' ' %or ch = '#' ch = ch - 'A' + 'a' %if 'A' <= ch <= 'Z' name = name . to string(ch) skip symbol %repeat %end ! Translate INet address to name. %string(31)%fn INet address to name(%integer address) %integer in, opened = 0, current address %string(31) name %on 3, 9 %start %if opened # 0 %start close input select input(in) %finish %result = "" %finish !! printstring("Looking for "); INet phex(address); newline in = in stream open input(3, database); select input(3) opened = 1 !! printstring("Opened"); newline %cycle read address(current address) !! printstring("Trying "); INet phex(current address); newline %if current address = address %start read name(name) close input; select input(in) %result = name %finish skip symbol %while next symbol # NL; skip symbol %repeat %end %integerfn INet name to address(%string(31) name) %string(31) current name %integer i, current address, in, opened = 0 %bytename x %on 3, 9 %start %if opened # 0 %start close input select input(in) %finish %result = 0 %finish %result = 0 %if name = "" %for i = 1, 1, length(name) %cycle x == charno(name, i) x = x - 'A' + 'a' %if 'A' <= x <= 'Z' %repeat !! printstring("Looking for "); printstring(name); newline in = in stream open input(3, database); select input(3) opened = 1 !! printstring("Opened"); newline %cycle read address(current address) !! printstring("Trying "); INet phex(current address); newline %cycle read name(current name) %exit %if current name = "" %if current name = name %start close input; select input(in) %result = current address %finish %repeat skip symbol %while next symbol # NL; skip symbol %repeat %end %end %of %file