a6208b51039416d5be37b79b89d405aeea93be30
markd
  Mon Apr 18 13:03:32 2016 -0700
Deal with case were CDS specifications that were create by other
software that didn't correctly set the completeness flags create frames
incorrectly on end-truncated sequences.  This code can't possible do the
right thing all the time if completeness isn't correctly flag, however
this makes it more likely to do the right thing when software start from
the beginning of the first coding defining CDS without actually setting
completeness flags.

diff --git src/hg/genePredToGtf/genePredToGtf.c src/hg/genePredToGtf/genePredToGtf.c
index b0bf513..a900d67 100644
--- src/hg/genePredToGtf/genePredToGtf.c
+++ src/hg/genePredToGtf/genePredToGtf.c
@@ -345,31 +345,31 @@
         }
 if (utr && (exonEnd > lastUtrStart))
     {
     int start = max(lastUtrStart, exonStart);
     writeGtfLine(f, source, name, geneName, chrom, strand,
                  ((strand == '+') ? "3UTR" : "5UTR"),
                  start, exonEnd, i, -1);
     }
 }
 
 void genePredWriteToGtf(struct genePred *gp, char *source, 
 	struct hash *dupeHash, FILE *f)
 /* Write out genePredName to GTF file. */
 {
 int i;
-char *name = findUniqueName(dupeHash, gp->name);
+mv old/char *name = findUniqueName(dupeHash, gp->name);
 char *geneName = gp->name2;
 char *chrom = gp->chrom;
 char strand = gp->strand[0];
 int *frames = (gp->optFields & genePredExonFramesFld) ? gp->exonFrames : calcFrames(gp);
 struct codonCoords firstCodon = findFirstCodon(gp, frames);
 struct codonCoords lastCodon = findLastCodon(gp, frames);
 
 // figure out bounds of CDS and UTR regions, moving stop codon to outside of
 // CDS.
 int firstUtrEnd = gp->cdsStart, lastUtrStart = gp->cdsEnd;
 int cdsStart = gp->cdsStart, cdsEnd = gp->cdsEnd;
 if ((strand == '+') && codonComplete(&lastCodon))
     cdsEnd = movePos(gp, lastUtrStart, -3);
 if ((strand == '-') && codonComplete(&firstCodon))
     cdsStart = movePos(gp, cdsStart, 3);