dbbc85fe1ded040b85b123282425606bba9674f8
braney
  Sat Apr 20 13:44:01 2013 -0700
polishing some of the snake track code, added support for HAL snakes in assembly hubs. refs #10637
diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index 617a6b4..1154054 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -23988,30 +23988,55 @@
        printf("<A HREF=\"http://www.ncbi.nlm.nih.gov/sites/GeneTests/review/disease/%s?db=genetests&search_param=contains\" TARGET=_blank>%s</A>", diseaseName, diseaseName);
        printf(")");
         }
      }
      printf("<BR>");
      sqlFreeResult(&sr);
 } /* end of prGRShortRefGene */
 
 void doQPCRPrimers(struct trackDb *tdb, char *itemName)
 /* Put up page for QPCRPrimers. */
 {
 genericHeader(tdb, itemName);
 doBedDetail(tdb, NULL, itemName);
 } /* end of doQPCRPrimers */
 
+void doSnakeClick(struct trackDb *tdb, char *itemName)
+/* Put up page for snakes. */
+{
+genericHeader(tdb, itemName);
+char *otherSpecies = trackHubSkipHubName(tdb->table) + strlen("snake");
+char *hubName = cloneString(database);
+char *ptr = strchr(hubName + 4, '_');
+*ptr = 0;
+char otherDb[4096];
+char *qName = cartOptionalString(cart, "qName");
+int qs = atoi(cartOptionalString(cart, "qs"));
+int qe = atoi(cartOptionalString(cart, "qe"));
+int qWidth = atoi(cartOptionalString(cart, "qWidth"));
+safef(otherDb, sizeof otherDb, "%s_%s", hubName, otherSpecies);
+
+
+printf("<A HREF=\"hgTracks?db=%s&position=%s:%d-%d&%s_snake%s=pack\" TARGET=_BLANK><B>Link to block in other species</A><BR>\n", otherDb, qName, qs, qe,hubName,trackHubSkipHubName(database));
+
+int qCenter = (qs + qe) / 2;
+int newQs = qCenter - qWidth/2;
+int newQe = qCenter + qWidth/2;
+printf("<A HREF=\"hgTracks?db=%s&position=%s:%d-%d&%s_snake%s=pack\" TARGET=\"_blank\"><B>Link to same window size in other species</A><BR>\n", otherDb, qName, newQs, newQe,hubName,trackHubSkipHubName(database));
+} 
+
+
 void doMiddle()
 /* Generate body of HTML. */
 {
 char *track = cartString(cart, "g");
 char *item = cartOptionalString(cart, "i");
 char *parentWigMaf = cartOptionalString(cart, "parentWigMaf");
 struct trackDb *tdb = NULL;
 
 
 if (hIsGisaidServer())
     {
     validateGisaidUser(cart);
     }
 
 /*	database and organism are global variables used in many places	*/
@@ -25208,30 +25233,34 @@
     {
     doNumtS(tdb, item);
     }
 else if (startsWith("cosmic", table))
     {
     doCosmic(tdb, item);
     }
 else if (sameString("geneReviews", table))
     {
     doGeneReviews(tdb, item);
     }
 else if (startsWith("qPcrPrimers", table))
     {
     doQPCRPrimers(tdb, item);
     }
+else if (isHubTrack(table) && startsWith("snake", trackHubSkipHubName(table)))
+    {
+    doSnakeClick(tdb, item);
+    }
 
 else if (tdb != NULL)
     {
     genericClickHandler(tdb, item, NULL);
     }
 else
     {
     cartWebStart(cart, database, "%s", track);
     printf("Sorry, clicking there doesn't do anything yet (%s).", track);
     }
 /* End of 1000+ line dispatch on table involving 100+ if/elses. */
 
 cartHtmlEnd();
 }