%externalpredicatespec FS lookup(%string(31) what, %integername value) %include "INet:Dump.Inc" %constinteger ether trace slots = 127; ! 2^n - 1 %constinteger ether trace bytes = 96 %recordformat ether trace fm(%integer inout, bytes, %bytearray data(1 : ether trace bytes)) %recordformat ether trace buffer fm(%integer next, %record(ether trace fm)%array t(0 : ether trace slots)) %constinteger trace in = 0 %constinteger trace out = 1 %begin %record(ether trace buffer fm)%name etb %record(ether trace fm)%name e %string(127) file %integer i, n %if FS lookup("ETHER_TRACE_BUFFER", i) %start etb == record(i) %else printstring("No ether trace buffer"); newline %stop %finish file = CLI param file = ":T" %if file = "" open output(3, file); select output(3) %for i = etb_next, 1, etb_next + ether trace slots + 1 %cycle e == etb_t(i & ether trace slots) %if e_bytes # 0 %start write(e_bytes, 0) %if e_inout = trace in %then printstring(" in") %c %else printstring(" out") newline n = e_bytes; n = ether trace bytes %if n > ether trace bytes dump(e_data(1), n) %finish %repeat close output; select output(0) %end %of %program