ELSE
BEGIN
tb: Table.Base ← TableBase[h, treeType];
tn: Tree.Node;
STCopyRead[h: h, to: @tn, from: @tb[tt.index],
nwords: SIZE [Tree.Node]];
PChar[h, '[]; PUnsigned[h, LOOPHOLE[tt.index]]; PRope[h, "] "];
IF tn.free
THEN
BEGIN
PRope[h, "FREE!"];
GO TO done
END;
PutNodeName[h, tn.name];
PNextUnsigned[h, "info", tn.info, overflow];
IF tn.attr1
OR tn.attr2
OR tn.attr3
THEN
BEGIN
PNext[h, "attr: ", 3, overflow];
IF tn.attr1 THEN PChar[h, '1];
IF tn.attr2 THEN PChar[h, '2];
IF tn.attr3 THEN PChar[h, '3];
END;
IF tn.shared THEN PNext[h, "shared",,overflow];
IF remaining # 0
THEN
BEGIN
endIndex: Tree.Index = LAST[Tree.Index];
endMark: Tree.Link = [subtree[index: endIndex]];
son: Tree.Link;
p: LONG POINTER ← @tb[tt.index].son[1];
IF tn.name # list
OR tn.nSons # 0
THEN
THROUGH [0..tn.nSons)
DO
STCopyRead[h: h, from: p, to: @son, nwords: SIZE[Tree.Link]];
PutSubTree[h, son, depth+1, remaining-1];
p ← p + SIZE[Tree.Link];
ENDLOOP
ELSE
DO
STCopyRead[h: h, from: p, to: @son, nwords: SIZE[Tree.Link]];
IF son = endMark THEN EXIT;
PutSubTree[h, son, depth+1, remaining-1];
p ← p + SIZE[Tree.Link];
ENDLOOP;
END;
END; -- of subtree arm