46cacb52f48b67dbdbb131af561827f3f5357a20 braney Tue Aug 10 13:20:23 2021 -0700 add utility to make a cartEdit that supports movinb existing tracks to a superTrack . Add a new cartEdit1 to move a bunch of tracks to three new supertracks diff --git src/hg/utils/cartEditSuperTrack/cartEditSuperTrack.c src/hg/utils/cartEditSuperTrack/cartEditSuperTrack.c new file mode 100644 index 0000000..06c5d66 --- /dev/null +++ src/hg/utils/cartEditSuperTrack/cartEditSuperTrack.c @@ -0,0 +1,100 @@ +/* cartEditSuperTrack - make a cart edit to put tracks into a supertrack. */ +#include "common.h" +#include "linefile.h" +#include "hash.h" +#include "options.h" + +void usage() +/* Explain usage and exit. */ +{ +errAbort( + "cartEditSuperTrack - make a cart edit to put tracks into a supertrack\n" + "usage:\n" + " cartEditSuperTrack tracks.txt cartVersion#\n" + "where tracks.txt is a tab-separated two column file with a list of tracks and the supertrack they're moving to.\n" + "options:\n" + " -xxx=XXX\n" + ); +} + +/* Command line validation table. */ +static struct optionSpec options[] = { + {NULL, 0}, +}; + +static void writeFile(FILE *f, struct hash *superHash, char *version) +{ +struct dyString *varDeclare = newDyString(4096); +struct dyString *editFunc = newDyString(4096); + +dyStringPrintf(varDeclare, +"#include \"common.h\"\n" +"#include \"cart.h\"\n" +"\n"); + +dyStringPrintf(editFunc, +"void cartEdit%s(struct cart *cart)\n" +"{\n", version); + +struct hashCookie cookie = hashFirst(superHash); +struct hashEl *hel; +while ((hel = hashNext(&cookie)) != NULL) + { + char name[4096]; + + safef(name, sizeof name, "edit%s%sTracks", version, (char *)hel->name); + + dyStringPrintf(editFunc, "cartTurnOnSuper(cart, %s, ArraySize(%s), \"%s\");\n", name, name, hel->name); + + dyStringPrintf(varDeclare, "static char *%s[] =\n{\n", name); + + struct hashCookie cookie2 = hashFirst((struct hash *)hel->val); + struct hashEl *hel2; + while ((hel2 = hashNext(&cookie2)) != NULL) + { + dyStringPrintf(varDeclare, "\"%s\",\n", hel2->name); + } + dyStringPrintf(varDeclare, "};\n\n"); + } +dyStringPrintf(editFunc, "}\n"); +fputs(varDeclare->string, f); +fputs(editFunc->string, f); +fclose(f); +} + +void cartEditSuperTrack(char *input, char *versionNumber, char *outFile) +/* cartEditSuperTrack - make a cart edit to put tracks into a supertrack. */ +{ +FILE *f = mustOpen(outFile, "w"); +struct lineFile *lf = lineFileOpen(input, TRUE); +char *row[2]; +struct hash *superHash = newHash(5); + +while (lineFileRow(lf, row)) + { + struct hash *trackHash = newHash(5); + struct hashEl *hel; + + if ((hel = hashLookup(superHash, row[1])) == NULL) + { + trackHash = newHash(5); + hashAdd(superHash, row[1], trackHash); + } + else + trackHash = hel->val; + + hashStore(trackHash, row[0]); + } + +writeFile(f, superHash, versionNumber); +} + +int main(int argc, char *argv[]) +/* Process command line. */ +{ +optionInit(&argc, argv, options); +if (argc != 4) + usage(); +cartEditSuperTrack(argv[1], argv[2], argv[3]); +return 0; +}