\n");
+hPrintf("\n");
+hPrintf("\n");
+hPrintf("Home | ",
+ orgEnc, database, cartSessionVarName(), cartSessionId(cart));
+
+if (hIsGisaidServer())
+ {
+ /* disable hgGateway for gisaid for now */
+ //hPrintf(" Sequence View Gateway | ", orgEnc, database);
+ hPrintf(
+ " %s | ",
+ '%', '%',
+ cartSessionVarName(),
+ cartSessionId(cart),
+ "Select Subjects");
+ }
+else
+if (hIsGsidServer())
+ {
+ hPrintf(" Sequence View Gateway | ", orgEnc, database);
+ hPrintf(
+ " %s | ",
+ '%', '%', "Select Subjects");
+ }
+else
+ {
+ hPrintf(" Genomes | ", orgEnc, database, cartSessionVarName(), cartSessionId(cart));
+ }
+if (psOutput)
+ {
+ hPrintf(" Genome Browser | ", orgEnc, database, cartSessionVarName(), cartSessionId(cart));
+ }
+if (gotBlat)
+ {
+ hPrintf(" Blat | ", uiVars->string);
+ }
+if (hIsGisaidServer())
+ {
+ hPrintf(" %s | ",
+ database,
+ cartSessionVarName(),
+ cartSessionId(cart),
+ "Table View");
+ }
+else if (hIsGsidServer())
+ {
+ hPrintf(" %s | ",
+ database, "Table View");
+ }
+else
+ {
+ /* disable TB for CGB servers */
+ if (!hIsCgbServer())
+ {
+ hPrintf(" %s | ",
+ database, cartSessionVarName(), cartSessionId(cart),
+ "Tables");
+ }
+ }
+
+if (hgNearOk(database))
+ {
+ hPrintf(" %s | ",
+ uiVars->string, "Gene Sorter");
+ }
+if (hgPcrOk(database))
+ {
+ hPrintf(" PCR | ", uiVars->string);
+ }
+if (!psOutput)
+ {
+ hPrintf(" "
+ "%s | ", hgcNameAndSettings(),
+ winStart, chromName, winStart, winEnd, database, uiVars->string, "DNA");
+ }
+
+if (!psOutput)
+ {
+ /* disable Convert function for CGB servers for the time being */
+ if (!hIsCgbServer())
+ if (liftOverChainForDb(database) != NULL)
+ {
+ hPrintf(" string, database);
+ hPrintf("\" class=\"topbar\">Convert | ");
+ }
+ }
+
+if (!psOutput)
+ {
+ hPrintf(" %s | ",cartSessionVarName(),
+ cartSessionId(cart), "PS/PDF");
+ }
+
+if (!psOutput)
+ {
+ if (wikiLinkEnabled())
+ {
+ printf(" Session | ",
+ cartSessionVarName(), cartSessionId(cart));
+ }
+ }
+
+char ensVersionString[256];
+char ensDateReference[256];
+ensGeneTrackVersion(database, ensVersionString, ensDateReference,
+ sizeof(ensVersionString));
+
+if (!psOutput)
+ {
+ if (differentWord(database,"susScr2"))
+ {
+ /* Print Ensembl anchor for latest assembly of organisms we have
+ * supported by Ensembl == if versionString from trackVersion exists */
+ if (sameWord(database,"hg19"))
+ {
+ printEnsemblAnchor(database, NULL, chromName, winStart, winEnd, &links);
+ }
+ else if (sameWord(database,"hg18"))
+ {
+ printEnsemblAnchor(database, "ncbi36", chromName, winStart, winEnd, &links);
+ }
+ else if (sameWord(database,"oryCun2") || sameWord(database,"anoCar2") || sameWord(database,"calJac3"))
+ {
+ printEnsemblAnchor(database, NULL, chromName, winStart, winEnd, &links);
+ }
+ else if (ensVersionString[0])
+ {
+ char *archive = NULL;
+ if (ensDateReference[0] && differentWord("current", ensDateReference))
+ archive = cloneString(ensDateReference);
+ /* Can we perhaps map from a UCSC random chrom to an Ensembl contig ? */
+ if (isUnknownChrom(database, chromName))
+ {
+ // which table to check
+ char *ctgPos = "ctgPos";
+
+ if (sameWord(database,"fr2"))
+ fr2ScaffoldEnsemblLink(archive, &links);
+ else if (hTableExists(database, UCSC_TO_ENSEMBL))
+ printEnsemblAnchor(database, archive, chromName, winStart, winEnd, &links);
+ else if (hTableExists(database, ctgPos))
+ /* see if we are entirely within a single contig */
+ {
+ struct sqlConnection *conn = hAllocConn(database);
+ struct sqlResult *sr = NULL;
+ char **row = NULL;
+ char query[256];
+ safef(query, sizeof(query),
+ "select * from %s where chrom = '%s' and chromStart<%u and chromEnd>%u",
+ ctgPos, chromName, winEnd, winStart);
+ sr = sqlGetResult(conn, query);
+
+ int itemCount = 0;
+ struct ctgPos *ctgItem = NULL;
+ while ((row = sqlNextRow(sr)) != NULL)
+ {
+ ctgPosFree(&ctgItem); // if there is a second one
+ ctgItem = ctgPosLoad(row);
+ ++itemCount;
+ if (itemCount > 1)
+ break;
+ }
+ sqlFreeResult(&sr);
+ hFreeConn(&conn);
+ if (1 == itemCount)
+ { // verify *entirely* within single contig
+ if ((winEnd <= ctgItem->chromEnd) &&
+ (winStart >= ctgItem->chromStart))
+ {
+ int ctgStart = winStart - ctgItem->chromStart;
+ int ctgEnd = ctgStart + winEnd - winStart;
+ printEnsemblAnchor(database, archive, ctgItem->contig,
+ ctgStart, ctgEnd, &links);
+ }
+ }
+ ctgPosFree(&ctgItem); // the one we maybe used
+ }
+ }
+ else
+ {
+ printEnsemblAnchor(database, archive, chromName, winStart, winEnd, &links);
+ }
+ }
+ }
+ }
+
+if (!psOutput)
+ {
+ char buf[2056];
+ /* Print NCBI MapView anchor */
+ if (sameString(database, "hg18"))
+ {
+ safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9606&build=previous&CHR=%s&BEG=%d&END=%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
+ }
+ if (sameString(database, "hg19"))
+ {
+ safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9606&CHR=%s&BEG=%d&END=%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
+ }
+ if (sameString(database, "mm8"))
+ {
+ safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=10090&CHR=%s&BEG=%d&END=%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
+ }
+ if (sameString(database, "danRer2"))
+ {
+ safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=7955&CHR=%s&BEG=%d&END=%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
+ }
+ if (sameString(database, "galGal3"))
+ {
+ safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9031&CHR=%s&BEG=%d&END=%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
+ }
+ if (sameString(database, "canFam2"))
+ {
+ safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9615&CHR=%s&BEG=%d&END=%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
+ }
+ if (sameString(database, "rheMac2"))
+ {
+ safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9544&CHR=%s&BEG=%d&END=%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
+ }
+ if (sameString(database, "panTro2"))
+ {
+ safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9598&CHR=%s&BEG=%d&END=%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
+ }
+ if (sameString(database, "anoGam1"))
+ {
+ safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=7165&CHR=%s&BEG=%d&END=%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
+ }
+ if (sameString(database, "bosTau6"))
+ {
+ safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9913&CHR=%s&BEG=%d&END=%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "NCBI", "ncbiLink", TRUE);
+ }
+ if (startsWith("oryLat", database))
+ {
+ safef(buf, sizeof(buf), "http://medaka.utgenome.org/browser_ens_jump.php?revision=version1.0&chr=chromosome%s&start=%d&end=%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "UTGB", "medakaLink", TRUE);
+ }
+ if (sameString(database, "cb3"))
+ {
+ safef(buf, sizeof(buf), "http://www.wormbase.org/db/seq/gbrowse/briggsae?name=%s:%d-%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE);
+ }
+ if (sameString(database, "cb4"))
+ {
+ safef(buf, sizeof(buf), "http://www.wormbase.org/db/gb2/gbrowse/c_briggsae?name=%s:%d-%d",
+ chromName, winStart+1, winEnd);
+ appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE);
+ }
+ if (sameString(database, "ce10"))
+ {
+ safef(buf, sizeof(buf), "http://www.wormbase.org/db/gb2/gbrowse/c_elegans?name=%s:%d-%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE);
+ }
+ if (sameString(database, "ce4"))
+ {
+ safef(buf, sizeof(buf), "http://ws170.wormbase.org/db/seq/gbrowse/wormbase?name=%s:%d-%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE);
+ }
+ if (sameString(database, "ce2"))
+ {
+ safef(buf, sizeof(buf), "http://ws120.wormbase.org/db/seq/gbrowse/wormbase?name=%s:%d-%d",
+ skipChr(chromName), winStart+1, winEnd);
+ appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE);
+ }
+ }
+
+for(link = links; link != NULL; link = link->next)
+ hPrintf(" %s | \n", link->url, link->id, link->name);
+
+if (hIsGisaidServer())
+ {
+ //hPrintf(" %s | \n", "Help");
+ hPrintf(" %s | \n", "Help");
+ }
+else
+if (hIsGsidServer())
+ {
+ hPrintf(" %s | \n", "Help");
+ }
+else
+ {
+ hPrintf(" %s | \n", "Help");
+ }
+
+hPuts(" |
| ");
+hPuts(" ");
+hPuts(" |