b02bfdfe7e01807988b9fd8422643c0d245c90d1
larrym
  Mon Aug 22 11:56:21 2011 -0700
support call as a CGI using the cart (see redmine 4888)
diff --git src/hg/hgTracks/renderMain.c src/hg/hgTracks/renderMain.c
index 63cf2bc..d638b0b 100644
--- src/hg/hgTracks/renderMain.c
+++ src/hg/hgTracks/renderMain.c
@@ -93,36 +93,56 @@
     track->loadItems(track);
     }
 verboseTime(2, "After load");
 
 /* Initialize global image box. */
 int sideSliceWidth  = 0;   // Just being explicit
 if (withLeftLabels)
     sideSliceWidth   = (insideX - gfxBorder*3) + 2;
 theImgBox = imgBoxStart(database,chromName,winStart,winEnd,(!revCmplDisp),sideSliceWidth,tl.picWidth);
 makeActiveImage(trackList, NULL);
 verboseTime(2,"After makeActiveImage");
 }
 
 int main(int argc, char *argv[])
 {
+if(argc == 1)
+    {
+    // CGI call
+
+    // htmlPushEarlyHandlers(); XXXX do I need to do this?
+
+    hPrintDisable();
+    oldVars = hashNew(10);
+    struct cart *cart = cartForSession(hUserCookie(), excludeVars, oldVars);
+    // setup approriate CGI variables which tell hgTracks code what to do.
+    cartSetBoolean(cart, "hgt.imageV1", TRUE);
+    cartSetBoolean(cart, "hgt.trackImgOnly", TRUE);
+    cartSetString(cart, "hgt.contentType", "png");
+    printf("Content-Disposition: filename=hgTracks.png\nContent-Type: image/png\n\n");
+    doMiddle(cart);
+    }
+else
+    {
+    // command line call
+
 /* Set up some timing since we're trying to optimize things very often. */
 long enteredMainTime = clock1000();
 verboseTimeInit();
-
 /* Push very early error handling - this is just
  * for the benefit of the cgiVarExists, which
  * somehow can't be moved effectively into doMiddle. */
 // htmlPushEarlyHandlers();
 
 /* Set up cgi vars from command line. */
 // cgiSpoof(&argc, argv);
 optionInit(&argc, argv, options);
 
 if (argc != 4)
     usage();
 
 hgTrackRenderFromCommandLine(argv[1], argv[2], argv[3]);
 
 verbose(2, "Overall total time: %ld millis<BR>\n", clock1000() - enteredMainTime);
+    }
 return 0;
 }