static void rMetaListWrite(struct meta *metaList, struct meta *parent, boolean level, int indent, boolean withParent, FILE *f) /* Write out list of stanzas at same level to file, their children too. */ { int totalIndent = level * indent; struct meta *meta; for (meta = metaList; meta != NULL; meta = meta->next) { struct metaTagVal *mtv; boolean gotParent = FALSE; for (mtv = meta->tagList; mtv != NULL; mtv = mtv->next) { if (sameString(mtv->tag, "parent")) { if (withParent) gotParent = TRUE; else continue; } spaceOut(f, totalIndent); fprintf(f, "%s %s\n", mtv->tag, mtv->val); } if (withParent && !gotParent && parent != NULL) { spaceOut(f, totalIndent); fprintf(f, "%s %s\n", "parent", parent->name); } fprintf(f, "\n"); if (meta->children) rMetaListWrite(meta->children, meta, level+1, indent, withParent, f); } }
void metaWriteAll(struct meta *metaList, char *fileName, int indent, boolean withParent) /* Write out metadata, optionally adding meta tag. */ { FILE *f = mustOpen(fileName, "w"); rMetaListWrite(metaList, NULL, 0, indent, withParent, f); carefulClose(&f); }
void metaWriteAll(struct meta *metaList, char *fileName, int indent, boolean withParent, int maxDepth) /* Write out metadata, optionally adding meta tag. If maxDepth is non-zero just write * up to that many levels. Root level is 0. */ { FILE *f = mustOpen(fileName, "w"); if (maxDepth == 0) maxDepth = BIGNUM; rMetaListWrite(metaList, NULL, 0, maxDepth, indent, withParent, f); carefulClose(&f); }