06d7be056190c14b85e71bc12523f18ea6815b5e
markd
  Mon Dec 7 00:50:29 2020 -0800
BLAT mmap index support merge with master

diff --git src/hg/lib/trackHub.c src/hg/lib/trackHub.c
index c097310..e06488c 100644
--- src/hg/lib/trackHub.c
+++ src/hg/lib/trackHub.c
@@ -182,30 +182,58 @@
 struct slPair *clade, *cladeList = NULL;
 
 struct trackHub *trackHub = globalAssemblyHubList;
 
 for(;trackHub; trackHub = trackHub->next)
     {
     AllocVar(clade);
     slAddHead(&cladeList, clade);
 
     clade->name = cloneString(trackHub->name);
     clade->val = cloneString(trackHub->shortLabel);
     }
 return cladeList;
 }
 
+struct dbDb *trackHubGetPcrServers()
+/* Look through attached trackHubs to see which of them have "isPcr" line in them. */
+{
+struct dbDb *db, *dbList = NULL;
+
+if (globalAssemblyHubList != NULL)
+    {
+    struct trackHub *trackHub = globalAssemblyHubList;
+
+    for(;trackHub; trackHub = trackHub->next)
+	{
+	struct trackHubGenome *hubGenome = trackHub->genomeList;
+	for(; hubGenome; hubGenome = hubGenome->next)
+	    {
+            if (hashFindVal(hubGenome->settingsHash,"isPcr") != NULL)
+		{
+		db = makeDbDbFromAssemblyGenome(hubGenome);
+		slAddHead(&dbList, db);
+		}
+	    }
+	}
+    }
+
+slReverse(&dbList);
+slSort(&dbList, hDbDbCmpOrderKey);
+return dbList;
+}
+
 static struct dbDb *getDbDbs(char *clade, boolean blatEnabled)
 /* Get a list of struct dbDbs from track hubs.  Only get blat enabled ones if asked */
 {
 struct dbDb *db, *dbList = NULL;
 
 if (globalAssemblyHubList != NULL)
     {
     struct trackHub *trackHub = globalAssemblyHubList;
 
     for(;trackHub; trackHub = trackHub->next)
 	{
 	if ((clade != NULL) && differentString(clade, trackHub->name))
 	    continue;
 
 	struct trackHubGenome *hubGenome = trackHub->genomeList;
@@ -1271,30 +1299,50 @@
 void trackHubFindPos(struct cart *cart, char *db, char *term, struct hgPositions *hgp)
 /* Look for term in track hubs.  Update hgp if found */
 {
 struct trackDb *tdbList = NULL;
 if (trackHubDatabase(db))
     {
     struct trackHubGenome *genome = trackHubGetGenome(db);
     tdbList = trackHubTracksForGenome(genome->trackHub, genome);
     }
 else
     tdbList = hubCollectTracks(db, NULL);
 
 findBigBedPosInTdbList(cart, db, tdbList, term, hgp, NULL);
 }
 
+boolean trackHubGetPcrParams(char *database, char **pHost, char **pPort)
+/* Get the isPcr params from a trackHub genome. */
+{
+char *hostPort;
+
+hostPort = trackHubAssemblyField(database, "isPcr");
+
+if (hostPort == NULL)
+    return FALSE;
+   
+hostPort = cloneString(hostPort);
+
+*pHost = nextWord(&hostPort);
+if (hostPort == NULL)
+    return FALSE;
+*pPort = hostPort;
+
+return TRUE;
+}
+
 boolean trackHubGetBlatParams(char *database, boolean isTrans, char **pHost, char **pPort, char **pGenomeDataDir)
 {
 char *setting;
 
 if (isTrans)
     {
     setting = trackHubAssemblyField(database, "transBlat");
     }
 else
     {
     setting = trackHubAssemblyField(database, "blat");
     }
 
 if (setting == NULL)
     return FALSE;