8f9e939cc256fdaaf7bda199bd9099538bfc6fb7
braney
  Mon Jan 23 13:46:52 2017 -0800
print out extra fields from bigPsl

diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index 9486106..20c8590 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -1526,31 +1526,31 @@
     char *idUrl = replaceInUrl(url, idForUrl, cart, database, seqName, winStart, 
                     winEnd, tdb->track, encode);
     printf("<a href=\"%s\" target=\"_blank\">%s</a>", idUrl, itemName);
     } 
 printf("</td></tr>\n");
 freeMem(slIds);
 //freeMem(idNames);
 }
 
 int extraFieldsStart(struct trackDb *tdb, int fieldCount, struct asObject *as)
 /* return the index of the first extra field */
 {
 int start = 0;
 char *type = cloneString(tdb->type);
 char *word = nextWord(&type);
-if (word && (sameWord(word,"bed") || sameWord(word,"bigBed") || sameWord(word,"bigGenePred")))
+if (word && (sameWord(word,"bed") || sameWord(word,"bigBed") || sameWord(word,"bigGenePred") || sameWord(word,"bigPsl")))
     {
     if (NULL != (word = nextWord(&type)))
         start = sqlUnsigned(word);
     else // custom beds and bigBeds may not have full type "begBed 9 +"
         start = max(0,slCount(as->columnList) - fieldCount);
     }
 return start;
 }
 
 struct slPair* getExtraFields(struct trackDb *tdb, char **fields, int fieldCount)
 /* return the extra field names and their values as a list of slPairs.  */
 {
 struct asObject *as = asForDb(tdb, database);
 if (as == NULL)
     return NULL;
@@ -2990,30 +2990,56 @@
 struct bigBedInterval *bb, *bbList;
 
 // If showAll is on, show all alignments with this qName, not just the
 // selected one.
 if (showAll)
     {
     int fieldIx;
     struct bptFile *bpt = bigBedOpenExtraIndex(bbi, "name", &fieldIx);
     struct lm *lm = lmInit(0);
     bbList = bigBedNameQuery(bbi, bpt, fieldIx, item, lm);
     }
 else
     bbList = bigBedIntervalQuery(bbi, seqName, ivStart, ivEnd, 0, lm);
 
 
+/* print out extra fields */
+boolean firstTime = TRUE;
+for (bb = bbList; bb != NULL; bb = bb->next)
+    {
+    char *restFields[256];
+    int restCount = chopTabs(cloneString(bb->rest), restFields);
+    if (sameString(restFields[0], item))
+        {
+        int bedSize = 25;
+        int restBedFields = bedSize - 3;
+        if (restCount > restBedFields)
+            {
+            if (firstTime)
+                {
+                printf("<B> %s Extra fields:</B><BR>", item);
+                firstTime = FALSE;
+                };
+
+            char **extraFields = (restFields + restBedFields);
+            int extraFieldCount = restCount - restBedFields;
+            int printCount = extraFieldsPrint(tdb,NULL,extraFields, extraFieldCount);
+            printCount += 0;
+            }
+        }
+    }
+
 char *bedRow[32];
 char startBuf[16], endBuf[16];
 
 int lastChromId = -1;
 char chromName[bbi->chromBpt->keySize+1];
 
 for (bb = bbList; bb != NULL; bb = bb->next)
     {
     bbiCachedChromLookup(bbi, bb->chromId, lastChromId, chromName, sizeof(chromName));
 
     lastChromId=bb->chromId;
     bigBedIntervalToRow(bb, chromName, startBuf, endBuf, bedRow, 4);
     if (sameString(bedRow[3], item))
 	{
         struct psl *psl= pslFromBigPsl(chromName, bb, seqTypeField, NULL, NULL);