e70152e44cc66cc599ff6b699eb8adc07f3e656a
kent
  Sat May 24 21:09:34 2014 -0700
Adding Copyright NNNN Regents of the University of California to all files I believe with reasonable certainty were developed under UCSC employ or as part of Genome Browser copyright assignment.
diff --git src/hg/lib/geneCheckWidget.c src/hg/lib/geneCheckWidget.c
index e41cfdd..30831dd 100644
--- src/hg/lib/geneCheckWidget.c
+++ src/hg/lib/geneCheckWidget.c
@@ -1,136 +1,139 @@
 /* geneCheckWidget - output HTML tables to display geneCheck or
  * geneCheckDetails with browser links */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
 #include "common.h"
 #include "geneCheckWidget.h"
 #include "geneCheck.h"
 #include "geneCheckDetails.h"
 #include "cart.h"
 #include "hCommon.h"
 
 static void prTracksAnchor(struct cart *cart, char *chrom, int start, int end,
                            char *target, char *fmt, ...)
 /* print an anchor to hgTracks, printf text content. Target can be
  * NULL */
 {
 va_list args;
 va_start(args, fmt);
 printf("<A HREF=\"%s?%s&position=%s:%d-%d\"", hgTracksName(), cartSidUrlString(cart),
        chrom, start, end);
 if (target != NULL)
     printf(" target=%s", target);
 printf(">");
 vprintf(fmt, args);
 printf("</A>");
 va_end(args);
 }
 
 static void prNameValCellStr(char *name, char *value, char *okVal, char *probClass)
 /* output a string name/value pair as adjacent cells in a table, set class to
  * probClass if value is not okVal  */
 {
 printf("<TR>");
 if (!sameString(value, okVal))
     printf("<TH CLASS=\"%s\">%s<TD CLASS=\"%s\">%s", probClass, name, probClass, value);
 else
     printf("<TH>%s<TD>%s", name, value);
 printf("</TR>\n");
 }
 
 static void prNameValCellInt(char *name, int value, int okVal, char *probClass)
 /* output a int name/value pair as adjacent cells in a table, set class to
  * probClass if value is not okVal  */
 {
 printf("<TR>");
 if (value != okVal)
     printf("<TH CLASS=\"%s\">%s<TD CLASS=\"%s\">%d", probClass, name, probClass, value);
 else
     printf("<TH>%s<TD>%d", name, value);
 printf("</TR>\n");
 }
 
 void geneCheckWidgetSummary(struct geneCheck *gc, char *tblClass, char *caption)
 /* write a table with result summary for one gene; caption maybe NULL */
 {
 printf("<TABLE class=\"%s\">\n", tblClass);
 if (caption != NULL)
     printf("<CAPTION>%s</CAPTION>\n", caption);
 printf("<TBODY>\n");
 prNameValCellStr("frame", gc->frame, "ok", "errorBg");
 prNameValCellStr("start", gc->start, "ok", "warnBg");
 prNameValCellStr("stop", gc->stop, "ok", "warnBg");
 prNameValCellInt("ORF stops", gc->orfStop, 0, "errorBg");
 prNameValCellInt("CDS gaps", gc->cdsGap-gc->cdsMult3Gap, 0, "errorBg");
 prNameValCellInt("CDS mult3 gaps", gc->cdsMult3Gap, 0, "warnBg");
 prNameValCellInt("CDS bad splices", gc->cdsSplice, 0, "errorBg");
 prNameValCellInt("UTR gaps", gc->utrGap, 0, "warnBg");
 prNameValCellInt("UTR bad splices", gc->utrSplice, 0, "errorBg");
 printf("</TBODY></TABLE>\n");
 }
 
 static void printSpliceInfo(struct cart *cart, struct geneCheck *gc, struct geneCheckDetails *gcd,
                             char *target)
 /* print details of splice problems, with links */
 {
 // info is like: CC..AG
 static int context = 3;
     
 // get correct splice site locations
 int start5, end5, start3, end3;
 if (gc->strand[0] == '+')
     {
     start5= gcd->chrStart-context;
     end5 = gcd->chrStart+2+context;
     start3 = (gcd->chrEnd-2)-context;
     end3 = (gcd->chrEnd-2)+context;
     }
 else
     {
     start5 = (gcd->chrEnd-2)-context;
     end5 = (gcd->chrEnd-2)+context;
     start3= gcd->chrStart-context;
     end3 = gcd->chrStart+2+context;
     }
 prTracksAnchor(cart, gcd->chr, start5, end5, target, "%.2s", gcd->info);
 printf("..");
 prTracksAnchor(cart, gcd->chr, start3, end3, target, "%.2s", gcd->info+4);
 }
 
 static void dispDetailsRow(struct cart *cart, struct geneCheck *gc,
                            struct geneCheckDetails *gcd, char *target)
 /* display a row of geneCheck details row */
 {
 /* get location and a little context */
 static int context = 20;
 int start = (gcd->chrStart < context) ? 0 : gcd->chrStart-context;
 int end = gcd->chrEnd+context;
 printf("<TR><TD>%s", gcd->problem);
 printf("<TD>");
 if (sameString(gcd->problem, "badCdsSplice") || sameString(gcd->problem, "badUtrSplice"))
     printSpliceInfo(cart, gc, gcd, target);
 else
     printf("%s", gcd->info);
 printf("<TD>");
 if (gcd->chrStart < gcd->chrEnd)
     prTracksAnchor(cart, gcd->chr, start, end, target,
                    "%s:%d-%d", gcd->chr, gcd->chrStart, gcd->chrEnd);
 printf("</TR>\n");
 }
 
 void geneCheckWidgetDetails(struct cart *cart, struct geneCheck *gc,
                             struct geneCheckDetails *gcdList, char *tblClass,
                             char *caption, char *target)
 /* display gene-check details; caption maybe NULL.  target is target of
  * links if not NULL.*/
 {
 struct geneCheckDetails *gcd;
 printf("<TABLE class=\"%s\">\n", tblClass);
 if (caption != NULL)
     printf("<CAPTION>%s</CAPTION>\n", caption);
 printf("<THEAD>\n");
 printf("<TR><TH>Problem<TH>Info<TH>Location</TR>\n");
 printf("</THEAD>\n");
 printf("<TBODY>\n");
 for (gcd = gcdList; gcd != NULL; gcd = gcd->next)
     dispDetailsRow(cart, gc, gcd, target);
 printf("</TBODY></TABLE>\n");
 }