42f147365cff4903feadc57b95dd6fe94e2d8d4b
hiram
  Mon Jul 21 13:29:35 2014 -0700
completed the joinedRmsk click handling refs #9741
diff --git src/hg/hgc/joinedRmskClick.c src/hg/hgc/joinedRmskClick.c
index 8355772..cfae48d 100644
--- src/hg/hgc/joinedRmskClick.c
+++ src/hg/hgc/joinedRmskClick.c
@@ -229,38 +229,38 @@
 int offset = cartInt (cart, "o");
 if (offset >= 0)
     {
     struct sqlConnection *conn2 = hAllocConn (database);
     struct sqlResult *sr2;
     char **row;
     char query[256];
     char qTable[64];
     boolean hasBin;
 
     int start = cartInt (cart, "o");
 
     if (hTableExists (database, table))
 	{
 	hFindSplitTable (database, seqName, table, qTable, &hasBin);
-	safef (query, sizeof (query),
+	sqlSafef (query, sizeof (query),
 	       "select * from %s where chrom = '%s' and alignStart >= %d"
 	       " and id = %s", qTable, seqName, start, repeat);
 
 	sr2 = sqlGetResult (conn2, query);
 	if ((row = sqlNextRow (sr2)) != NULL)
 	    {
-	    struct rmskJoined *rmJoin = rmskJoinedLoad (row);
+	    struct rmskJoined *rmJoin = rmskJoinedLoad (row + hasBin);
 
 	    char class[32];
 	    class[0] = '\0';
 	    char family[32];
 	    family[0] = '\0';
 	    char *poundPtr = index (rmJoin->name, '#');
 	    if (poundPtr)
 		{
 		// Terminate name string properly
 		safecpy (class, sizeof (class), poundPtr + 1);
 		*poundPtr = '\0';
 		char *slashPtr = index (class, '/');
 		if (slashPtr)
 		    {
 		    // Terminate class string properly
@@ -276,31 +276,31 @@
 	    printf ("<b>Joined Element Genomic Range:</b> %s:%d-%d<br>\n",
 		    rmJoin->chrom, rmJoin->alignStart, rmJoin->alignEnd);
 	    printf ("<br><br>\n");
 	    }
 	sqlFreeResult (&sr2);
 	}
 
     /*
      * Locate *.out annotation for this element
      */
     if (hTableExists (database, outTable))
 	{
 	int isFirst = 0;
 	struct rmskOut2 *ro;
 	hFindSplitTable (database, seqName, outTable, qTable, &hasBin);
-	safef (query, sizeof (query),
+	sqlSafef (query, sizeof (query),
 	       "select * from %s where genoName = '%s' and genoStart >= %d"
 	       " and id = %s", qTable, seqName, start, repeat);
 	sr2 = sqlGetResult (conn2, query);
 	printf ("<h4>RepeatMasker Annotation:</h4>\n");
 	printf
 	    ("The RepeatMasker annotation line(s) for this element. "
 	     "If the element is fragmented the output will contain one "
 	     "line per joined fragment.<p>\n");
 	printf ("<table cellspacing=\"0\">\n");
 	while ((row = sqlNextRow (sr2)) != NULL)
 	    {
 	    ro = rmskOut2Load (row + hasBin);
 	    if (!isFirst++)
 	    printOutTableHeader (ro->strand[0]);
 	    printf ("  <tr>\n");
@@ -343,31 +343,31 @@
 
 	    }
 	sqlFreeResult (&sr2);
 	printf ("</table>\n");
 	}
 
     printf ("<br><br>\n");
 
     /*
      * Locate *.align data for this element
      */
     if (hTableExists (database, alignTable))
 	{
 	struct rmskAlign *ro;
 	hFindSplitTable (database, seqName, alignTable, qTable, &hasBin);
-	safef (query, sizeof (query),
+	sqlSafef (query, sizeof (query),
 	       "select * from %s where genoName = '%s' and genoStart >= %d"
 	       " and id = %s", qTable, seqName, start, repeat);
 	sr2 = sqlGetResult (conn2, query);
 	printf ("<h4>RepeatMasker Alignments:</h4>\n");
 	printf
 	    ("The raw alignment data used by RepeatMasker to generate "
 	     "the final annotation call for this element. NOTE: The "
 	     "aligned sequence names and consensus positions may differ "
 	     "from the final annotation.<p>\n");
 	printf ("<table>\n");
 	while ((row = sqlNextRow (sr2)) != NULL)
 	    {
 	    ro = rmskAlignLoad (row + hasBin);
 	    printf ("  <tr>\n");
 	    printf ("    <td>%d</td>\n", ro->swScore);