!************************************************************************ !* * !* Program to munge text name-server table NS.TXT to binary form NS.DAT * !* NS.DAT is used by INVENTY to produce APM inventory and by WHATIS. * !* * !* Version 1.3 4 May 1988 * !* * !************************************************************************ !8/12/87: Use char 1 of NS.TXT as a server (A,B,C,D,M) and generates !1/5/88: Add Inet addresses and names ! modified NS recordformat (inon and room merged, new bootfs field) %include "inc:util.imp" %begin %include "nsdefs.inc" %include "ie:sysdep.inc" %integer i, l, j %constinteger max = 16_56 %string (255) s, comment %record (ns lfm) lf %recordformat f(%string (4) add, inet, case, %string (8) sname, %byte io, rm, bootfs, %string (31) iname, lname, %string (18) bpmap) %record (f) %array t(0:max) %routine printfield(%string (255) s, %integer l) printstring (s) spaces(l-length(s)) %if l > length(s) %end %routine reads(%string (*) %name s, %integer l) %integer i, c s = "" %if l > 0 %start %for i = 1, 1, l %cycle readsymbol(c) s = s.tostring(c) %repeat %else l = -l %cycle readsymbol(c) %exit %if c < ' ' %or length(s) = l s = s.tostring(c) %repeat %finish s = s." " %while length(s) < l length(s) = l %end s = cliparam; s = "ns.txt" %if s = "" open input(1, s); selectinput(1) readline(comment) ;!Date and update info. printline(comment) %for i = 0, 1, max %cycle readsymbol(t(i)_bootfs); skipsymbol; skipsymbol; skipsymbol reads(t(i)_inet, 2); skipsymbol reads(t(i)_case, 3); skipsymbol reads(t(i)_sname, 8); skipsymbol; reads(t(i)_add, 4); skipsymbol reads(t(i)_bpmap, 18); skipsymbol readsymbol(t(i)_io); readsymbol(t(i)_rm); skipsymbol; reads(t(i)_iname, 12); reads(t(i)_lname, -31) %if t(i)_io = 'A' %start t(i)_io = ns at %elseif t(i)_io = 'O' t(i)_io = ns on %elseif t(i)_io = 'I' t(i)_io = ns in %else t(i)_io = ns blank %finish %if t(i)_rm = 'T' %start t(i)_rm = ns the %elseif t(i)_rm = 'R' t(i)_rm = ns room %else t(i)_rm = ns blank %finish %repeat !Now write out the file open output(1, "ns.dat"); selectoutput(1) !Put all the short names as a quick reference at the front of the file !(128 * 8 bytes) %for i = 0, 1, max %cycle printstring(t(i)_sname) %repeat !Then write out all the long records (128 * 64 bytes) %for i = 0, 1, max %cycle lf = 0 lf_inonrm = (t(i)_io)<<4+(t(i)_rm)&15 { 1: IN/ON/AT} lf_bootfs = t(i)_bootfs { 1: Boot filestore} %if t(i)_case = "???" %then lf_case = 0 %else lf_case = stoi(t(i)_case) %if t(i)_inet = "?" %then lf_inet=0 %else lf_inet = stoi(t(i)_inet) bulk move(7, charno(t(i)_iname, 1), lf_iname(1)) { 7: Inet name} bulk move(31, charno(t(i)_lname, 1), lf_lname(1)) {31: long name} bulk move(4, charno(t(i)_add, 1), lf_add(1)) { 4: Location} bulk move(18, charno(t(i)_bpmap, 1), lf_bpmap(1)) {18: Peripheral list} ! Total {64} %for j = 0, 1, sizeof(lf)-1 %cycle printsymbol(byteinteger(addr(lf)+j)) %repeat %repeat printsymbol(length(comment)); printstring(comment); spaces(255-length(comment)) %endofprogram