/*There is no FPrintF type function and no way to grow files. Therefore, use mem to hold the file until you are done. The CDoc framework is convenient for this. */ 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 FPrintFDemo(U8 *output_filename=NULL) { I64 fuf_flags = 0; CDoc *doc = DocNew(output_filename); FlagsScan(&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$"); DocRecalc(doc); if (output_filename) DocWrite(doc, FALSE); else DocWrite(doc, TRUE); DocDel(doc); } FPrintFDemo;