src/hg/lib/hui.c 1.248

1.248 2009/11/12 20:34:36 tdreszer
Fix uninitialized variables, which hit on matrix X no Y
Index: src/hg/lib/hui.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/hui.c,v
retrieving revision 1.247
retrieving revision 1.248
diff -b -B -U 4 -r1.247 -r1.248
--- src/hg/lib/hui.c	11 Nov 2009 22:04:48 -0000	1.247
+++ src/hg/lib/hui.c	12 Nov 2009 20:34:36 -0000	1.248
@@ -3037,8 +3037,9 @@
     dimA=3, // dimA is start of first of the optional non-matrix, non-view dimensions
 };
 int dimMax=dimA;  // This can expand, depending upon ABC dimensions
 members_t* dimensions[27]; // Just pointers, so make a bunch!
+memset((char *)dimensions,0,sizeof(dimensions));
 dimensions_t *dims = dimensionSettingsGet(parentTdb);
 if(dims != NULL)
     {
     int ix;
@@ -5049,10 +5050,11 @@
 else if (left && dimensionY && childTdb != NULL)
     printf("<TH ALIGN=RIGHT nowrap>%s</TH>\n",labelWithVocabLink(parentTdb,childTdb,dimensionY->tag,dimensionY->values[ixY]));
 }
 
-static int displayNonXYdimensions(struct cart *cart, struct trackDb *parentTdb)
-/* This will walk through all declared nonX&Y dimensions (X and Y is the 2D matrix of CBs. */
+static int displayABCdimensions(struct cart *cart, struct trackDb *parentTdb,int expected)
+/* This will walk through all declared nonX&Y dimensions (X and Y is the 2D matrix of CBs.
+   NOTE: ABC dims are only supported if there are X & Y both.  Also expected number should be passed in */
 {
 int count=0,ix;
 for(ix=0;ix<26;ix++)
     {
@@ -5116,8 +5118,10 @@
             }
         }
     puts("</TR>");
     subgroupMembersFree(&dim);
+    if(count==expected)
+        break;
     }
 if(count>0)
     puts("</TABLE>");
 return count;
@@ -5131,9 +5135,10 @@
 char objName[SMALLBUF];
 char javascript[JBUFSIZE];
 struct trackDb *subtrack;
 
-if(!dimensionsExist(parentTdb))
+dimensions_t *dims = dimensionSettingsGet(parentTdb);
+if(dims == NULL)
     return FALSE;
 
 int ixX,ixY;
 members_t *dimensionX = subgroupMembersGetByDimension(parentTdb,'X');
@@ -5176,8 +5181,10 @@
 if(dimensionX && !dimensionY)
     safef(javascript, sizeof(javascript), "%s:</B>",dimensionX->title);
 else if(!dimensionX && dimensionY)
     safef(javascript, sizeof(javascript), "%s:</B>",dimensionY->title);
+else if(dims->count == 2)
+    safef(javascript, sizeof(javascript), "%s and %s:</B>",dimensionX->title,dimensionY->title);
 else
     safef(javascript, sizeof(javascript), "multiple variables:</B>");
 puts(strLower(javascript));
 
@@ -5185,9 +5192,11 @@
     puts("(<A HREF=\"../goldenPath/help/multiView.html\" title='Help on views' TARGET=_BLANK>help</A>)\n");
 
 puts("<BR>\n");
 
-displayNonXYdimensions(cart,parentTdb);
+if(dims->count > 2)
+    displayABCdimensions(cart,parentTdb,(dims->count - 2));  // No dimABCs without X & Y both
+dimensionsFree(&dims);
 
 printf("<TABLE class='greenBox' bgcolor='%s' borderColor='%s'>\n",COLOR_BG_DEFAULT,COLOR_BG_DEFAULT);
 
 matrixXheadings(parentTdb,dimensionX,dimensionY,tdbsX,TRUE);