U0 TreeSub(CDoc *doc,CDirEntry *tmpde)
{
CDirEntry *tmpde1;
while (tmpde) {
tmpde1=tmpde->next;
if (tmpde->attr & RS_ATTR_DIR) {
DocPrint(doc,"$TR,\"\"$");
DocPrint(doc,"$MA,T=\"%s\",LM=\"Cd(\\\"%s\\\");Dir;\n\"$\n",
tmpde->name,tmpde->full_name);
if (tmpde->sub) {
DocPrint(doc,"$ID,+2$");
TreeSub(doc,tmpde->sub);
DocPrint(doc,"$ID,-2$");
}
} else
DocPrint(doc,"$LK,\"%s\",A=\"FI:%s\"$\n",
tmpde->name,tmpde->full_name);
//Note there is also a routine
//to delete an entire CDirEntry tree.
//See DirTreeDel().
DirEntryDel(tmpde);
tmpde=tmpde1;
}
}

U0 TreeDemo()
{
I64 fuf_flags=0;
CDoc *doc=DocNew;
ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r");
DocPrint(doc,"$TR-C,\"\"$\n");
DocPrint(doc,"$ID,+2$");
TreeSub(doc,FilesFind("/*",fuf_flags));
DocPrint(doc,"$ID,-2$");
DocInsDoc(DocPut,doc);
DocDel(doc);
}

TreeDemo;