21a6584e8ecdbba6d802ab30f3ec564c08b7dcc3 galt Sat Jun 29 02:11:16 2013 -0700 fixing callers of sqlGetField to use sqlSafeFrag diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index d71e830..6f53033 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -936,32 +936,32 @@ id = sqlQuickString(conn, buf); hFreeConn(&conn); } return id; } char* replaceInUrl(struct trackDb *tdb, char *url, char *idInUrl, boolean encode) /* replace $$ in url with idInUrl. Supports many other wildchards */ { struct dyString *uUrl = NULL; struct dyString *eUrl = NULL; char startString[64], endString[64]; char *ins[9], *outs[9]; char *eItem = (encode ? cgiEncode(idInUrl) : cloneString(idInUrl)); -sprintf(startString, "%d", winStart); -sprintf(endString, "%d", winEnd); +safef(startString, sizeof startString, "%d", winStart); +safef(endString, sizeof endString, "%d", winEnd); ins[0] = "$$"; outs[0] = idInUrl; ins[1] = "$T"; outs[1] = tdb->track; ins[2] = "$S"; outs[2] = seqName; ins[3] = "$["; outs[3] = startString; ins[4] = "$]"; outs[4] = endString; ins[5] = "$s"; outs[5] = skipChr(seqName); ins[6] = "$D"; outs[6] = database; ins[7] = "$P"; /* for an item name of the form: prefix:suffix */ @@ -4386,75 +4386,75 @@ || ( tdbVisLimitedByAncestors(cart,tdb,TRUE,TRUE) != tvHide && forestHasUnderstandableTrack(database, tdb) ) ) { char *visString = cartUsualString(cart, track, hStringFromTv(tdb->visibility)); if (differentString(visString, "hide") && tdb->parent) { char *parentVisString = cartUsualString(cart, tdb->parentName, hStringFromTv(tdb->parent->visibility)); if (sameString("hide", parentVisString)) visString = "hide"; } char buf[128]; if (sameString(visString, "hide")) { char varName[256]; - sprintf(varName, "%s_case", track); + safef(varName, sizeof varName, "%s_case", track); cartSetBoolean(cart, varName, FALSE); - sprintf(varName, "%s_u", track); + safef(varName, sizeof varName, "%s_u", track); cartSetBoolean(cart, varName, FALSE); - sprintf(varName, "%s_b", track); + safef(varName, sizeof varName, "%s_b", track); cartSetBoolean(cart, varName, FALSE); - sprintf(varName, "%s_i", track); + safef(varName, sizeof varName, "%s_i", track); cartSetBoolean(cart, varName, FALSE); - sprintf(varName, "%s_red", track); + safef(varName, sizeof varName, "%s_red", track); cartSetInt(cart, varName, 0); - sprintf(varName, "%s_green", track); + safef(varName, sizeof varName, "%s_green", track); cartSetInt(cart, varName, 0); - sprintf(varName, "%s_blue", track); + safef(varName, sizeof varName, "%s_blue", track); cartSetInt(cart, varName, 0); } else { printf("<TR>"); printf("<TD>%s</TD>", tdb->shortLabel); - sprintf(buf, "%s_case", tdb->track); + safef(buf, sizeof buf, "%s_case", tdb->track); printf("<TD>"); cgiMakeCheckBox(buf, cartUsualBoolean(cart, buf, FALSE)); printf("</TD>"); - sprintf(buf, "%s_u", tdb->track); + safef(buf, sizeof buf, "%s_u", tdb->track); printf("<TD>"); cgiMakeCheckBox(buf, cartUsualBoolean(cart, buf, FALSE)); printf("</TD>"); - sprintf(buf, "%s_b", tdb->track); + safef(buf, sizeof buf, "%s_b", tdb->track); printf("<TD>"); cgiMakeCheckBox(buf, cartUsualBoolean(cart, buf, FALSE)); printf("</TD>"); - sprintf(buf, "%s_i", tdb->track); + safef(buf, sizeof buf, "%s_i", tdb->track); printf("<TD>"); cgiMakeCheckBox(buf, cartUsualBoolean(cart, buf, FALSE)); printf("</TD>"); printf("<TD>"); - sprintf(buf, "%s_red", tdb->track); + safef(buf, sizeof buf, "%s_red", tdb->track); cgiMakeIntVar(buf, cartUsualInt(cart, buf, 0), 3); printf("</TD>"); printf("<TD>"); - sprintf(buf, "%s_green", tdb->track); + safef(buf, sizeof buf, "%s_green", tdb->track); cgiMakeIntVar(buf, cartUsualInt(cart, buf, 0), 3); printf("</TD>"); printf("<TD>"); - sprintf(buf, "%s_blue", tdb->track); + safef(buf, sizeof buf, "%s_blue", tdb->track); cgiMakeIntVar(buf, cartUsualInt(cart, buf, 0), 3); printf("</TD>"); printf("</TR>\n"); } } } printf("</TABLE>\n"); printf("</FORM>\n"); if (hIsGsidServer()) { printf("<H3>Coloring Information and Examples</H3>\n"); puts("The color values range from 0 (darkest) to 255 (lightest) and are additive.\n"); puts("The examples below show a few ways to highlight individual tracks, " "and their interplay. It's good to keep it simple at first. It's easy " "to make pretty, but completely cryptic, displays with this feature."); @@ -4874,31 +4874,31 @@ if (bb > 255) bb = 255; c->b = bb; } } void getDnaHandleBits(char *track, char *type, Bits *bits, int winStart, int winEnd, boolean isRc, struct featureBits *fbList) /* See if track_type variable exists, and if so set corresponding bits. */ { char buf[256]; struct featureBits *fb; int s,e; int winSize = winEnd - winStart; -sprintf(buf, "%s_%s", track, type); +safef(buf, sizeof buf, "%s_%s", track, type); if (cgiBoolean(buf)) { for (fb = fbList; fb != NULL; fb = fb->next) { s = fb->start - winStart; e = fb->end - winStart; if (isRc) reverseIntRange(&s, &e, winSize); bitSetRange(bits, s, e - s); } } } void doGetDna3() /* Fetch DNA in extended color format */ @@ -5050,55 +5050,55 @@ fbList = slCat(fbList,fbLeafList); } freeMem(refLeaf); } } else fbList = fbGetRange(database, tdb->table, seqName, winStart, winEnd); } /* Flip underline/italic/bold bits. */ getDnaHandleBits(track, "u", uBits, winStart, winEnd, isRc, fbList); getDnaHandleBits(track, "b", bBits, winStart, winEnd, isRc, fbList); getDnaHandleBits(track, "i", iBits, winStart, winEnd, isRc, fbList); /* Toggle case if necessary. */ - sprintf(buf, "%s_case", track); + safef(buf, sizeof buf, "%s_case", track); if (cgiBoolean(buf)) { for (fb = fbList; fb != NULL; fb = fb->next) { DNA *dna; int start = fb->start - winStart; int end = fb->end - winStart; int size = fb->end - fb->start; if (isRc) reverseIntRange(&start, &end, seq->size); dna = seq->dna + start; if (defaultUpper) toLowerN(dna, size); else toUpperN(dna, size); } } /* Add in RGB values if necessary. */ - sprintf(buf, "%s_red", track); + safef(buf, sizeof buf, "%s_red", track); r = cartInt(cart, buf); - sprintf(buf, "%s_green", track); + safef(buf, sizeof buf, "%s_green", track); g = cartInt(cart, buf); - sprintf(buf, "%s_blue", track); + safef(buf, sizeof buf, "%s_blue", track); b = cartInt(cart, buf); if (r != 0 || g != 0 || b != 0) { for (fb = fbList; fb != NULL; fb = fb->next) { int s = fb->start - winStart; int e = fb->end - winStart; if (isRc) reverseIntRange(&s, &e, winEnd - winStart); addColorToRange(r, g, b, colors, s, e); } } } } @@ -5678,31 +5678,31 @@ } void doHgRna(struct trackDb *tdb, char *acc) /* Click on an individual RNA. */ { char *track = tdb->track; char *table = tdb->table; struct sqlConnection *conn = hAllocConn(database); char *type; int start = cartInt(cart, "o"); struct psl *pslList = NULL; if (sameString("xenoMrna", track) || sameString("xenoBestMrna", track) || sameString("xenoEst", track) || sameString("sim4", track) ) { char temp[256]; - sprintf(temp, "non-%s RNA", organism); + safef(temp, sizeof temp, "non-%s RNA", organism); type = temp; } else if ( sameWord("blatzHg17KG", track) ) { type = "Human mRNA"; } else if (stringIn("estFiltered",track)) { type = "EST"; } else if (stringIn("est", track) || stringIn("Est", track)) { type = "EST"; // table = "all_est"; // Should fall out of wash now } @@ -6930,31 +6930,31 @@ /* Look up alignments in database */ hFindSplitTable(database, seqName, aliTable, table, &hasBin); sqlSafef(query, sizeof query, "select * from %s where qName = '%s' and tName=\"%s\" and tStart=%d", table, acc, seqName, start); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) == NULL) errAbort("Couldn't find alignment for %s at %d", acc, start); psl = pslLoad(row+hasBin); sqlFreeResult(&sr); /* get bz rna snapshot for blastz alignments */ if (sameString("mrnaBlastz", aliTable) || sameString("pseudoMrna", aliTable)) { struct sqlConnection *conn = hAllocConn(database); unsigned retId = 0; - sprintf(accTmp,"bz-%s",acc); + safef(accTmp, sizeof accTmp, "bz-%s", acc); if (hRnaSeqAndIdx(accTmp, &rnaSeq, &retId, conn) == -1) rnaSeq = hRnaSeq(database, acc); hFreeConn(&conn); } else if (sameString("HInvGeneMrna", aliTable)) { /* get RNA accession for the gene id in the alignment */ sqlSafef(query, sizeof query, "select mrnaAcc from HInv where geneId='%s'", acc); rnaSeq = hRnaSeq(database, sqlQuickString(conn, query)); } else rnaSeq = hRnaSeq(database, acc); if (startsWith("xeno", aliTable)) showSomeAlignment(psl, rnaSeq, gftDnaX, 0, rnaSeq->size, NULL, cdsStart, cdsEnd); @@ -7141,36 +7141,36 @@ if (chain->blockList == NULL) { printf("None of chain is actually in the window"); return; } fatPsl = chainToPsl(chain); chainFree(&chain); psl = pslTrimToTargetRange(fatPsl, winStart, winEnd); pslFree(&fatPsl); if (sameWord(otherDb, "seq")) { qSeq = hExtSeqPart(database, psl->qName, psl->qStart, psl->qEnd); - sprintf(name, "%s", psl->qName); + safef(name, sizeof name, "%s", psl->qName); } else { qSeq = loadGenomePart(otherDb, psl->qName, psl->qStart, psl->qEnd); - sprintf(name, "%s.%s", otherOrg, psl->qName); + safef(name, sizeof name, "%s.%s", otherOrg, psl->qName); } writeFramesetType(); puts("<HTML>"); printf("<HEAD>\n<TITLE>%s %s vs %s %s </TITLE>\n</HEAD>\n\n", (otherOrg == NULL ? "" : otherOrg), psl->qName, org, psl->tName ); showSomeAlignment(psl, qSeq, gftDnaX, psl->qStart, psl->qEnd, name, 0, 0); } void htcChainTransAli(char *item) /* Draw detailed alignment representation of a chain with translated protein */ { struct chain *chain; struct psl *fatPsl, *psl = NULL; int id = atoi(item); char *track = cartString(cart, "o"); @@ -7198,36 +7198,36 @@ if (chain->blockList == NULL) { printf("None of chain is actually in the window"); return; } fatPsl = chainToPsl(chain); chainFree(&chain); psl = pslTrimToTargetRange(fatPsl, winStart, winEnd); pslFree(&fatPsl); if (sameWord(otherDb, "seq")) { qSeq = hExtSeq(database, psl->qName); - sprintf(name, "%s", psl->qName); + safef(name, sizeof name, "%s", psl->qName); } else { qSeq = loadGenomePart(otherDb, psl->qName, psl->qStart, psl->qEnd); - sprintf(name, "%s.%s", otherOrg, psl->qName); + safef(name, sizeof name, "%s.%s", otherOrg, psl->qName); } writeFramesetType(); puts("<HTML>"); printf("<HEAD>\n<TITLE>%s %s vs %s %s </TITLE>\n</HEAD>\n\n", (otherOrg == NULL ? "" : otherOrg), psl->qName, org, psl->tName ); /*showSomeAlignment(psl, qSeq, gftDnaX, psl->qStart, psl->qEnd, name, 0, 0); */ showSomeAlignment(psl, qSeq, gftDnaX, psl->qStart, psl->qEnd, name, cdsStart, cdsEnd); } void htcUserAli(char *fileNames) /* Show alignment for accession. */ { char *pslName, *faName, *qName; struct lineFile *lf; bioSeq *oSeqList = NULL, *oSeq = NULL; @@ -7288,31 +7288,31 @@ addp = cartUsualInt(cart, "addp",0); pred = cartUsualString(cart, "pred",NULL); start = cartInt(cart, "o"); hFindSplitTable(database, seqName, table, fullTable, &hasBin); sqlSafef(query, sizeof query, "select * from %s where qName = '%s' and tName = '%s' and tStart=%d", fullTable, readName, seqName, start); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) == NULL) errAbort("Couldn't find alignment for %s at %d", readName, start); psl = pslLoad(row+hasBin); sqlFreeResult(&sr); if ((addp == 1) || (pred != NULL)) { char *ptr; - sprintf(buffer, "%s",readName); + safef(buffer, sizeof buffer, "%s",readName); if (!(sameString(pred, "ce3.blastWBPep01") || sameString(pred, "ce9.blastSGPep01") || sameString(pred, "ce6.blastSGPep01") || sameString(pred, "ce4.blastSGPep01")) && (ptr = strchr(buffer, '.')) != NULL) { *ptr = 0; psl->qName = cloneString(buffer); *ptr++ = 'p'; *ptr = 0; } if (addp == 1) seq = hPepSeq(database, buffer); else @@ -8389,39 +8389,39 @@ if (sameString(gpList->name2, "noXref")) printf("none<BR>\n"); else printf("<A HREF=\"%s/geneview?gene=%s\" " "target=_blank>%s</A><BR>", ensUrl, gpList->name2, gpList->name2); } genePredFreeList(&gpList); printf("<B>Ensembl Transcript: </B>"); printf("<A HREF=\"%s/transview?transcript=%s\" " "target=_blank>", ensUrl, shortItemName); printf("%s</A><br>", itemName); if (hTableExists(database, "superfamily")) { - safef(cond_str, sizeof(cond_str), "transcript_name='%s'", shortItemName); + sqlSafefFrag(cond_str, sizeof(cond_str), "transcript_name='%s'", shortItemName); /* This is necessary, Ensembl kept changing their gene_xref table definition and content.*/ proteinID = NULL; if (hTableExists(database, "ensemblXref3")) { /* use ensemblXref3 for Ensembl data release after ensembl34d */ - safef(cond_str3, sizeof(cond_str3), "transcript='%s'", shortItemName); + sqlSafefFrag(cond_str3, sizeof(cond_str3), "transcript='%s'", shortItemName); ensPep = sqlGetField(database, "ensemblXref3", "protein", cond_str3); if (ensPep != NULL) proteinID = ensPep; } if (hTableExists(database, "ensTranscript") && (proteinID == NULL)) { proteinID = sqlGetField(database, "ensTranscript", "translation_name", cond_str); } else { if (hTableExists(database, "ensGeneXref")) { proteinID = sqlGetField(database, "ensGeneXref","translation_name", cond_str); } else if (hTableExists(database, "ensemblXref2")) @@ -8466,52 +8466,52 @@ if (sameWord(organism, "dog")) { genomeStr = "dg"; } else { warn("Organism %s not found!", organism); return; } } } } #ifdef NOT /* superfamily does not update with ensGene updates, stop printing an invalid URL */ - sprintf(cond_str, "name='%s'", shortItemName); + sqlSafefFrag(cond_str, "name='%s'", shortItemName); char *ans = sqlGetField(conn, database, "superfamily", "name", cond_str); if (ans != NULL) { /* double check to make sure trackDb is also updated to be in sync with existence of supfamily table */ struct trackDb *tdbSf = hashFindVal(trackHash, "superfamily"); if (tdbSf != NULL) { char supfamURL[512]; printf("<B>Superfamily Link: </B>"); safef(supfamURL, sizeof(supfamURL), "<A HREF=\"%s%s;seqid=%s\" target=_blank>", tdbSf->url, genomeStr, proteinID); printf("%s%s</A><BR>\n", supfamURL, proteinID); } } #endif } if (hTableExists(database, "ensGtp") && (proteinID == NULL)) { /* shortItemName removes version number but sometimes the ensGtp */ /* table has a transcript with version number so exact match not used */ - safef(cond_str2, sizeof(cond_str2), "transcript like '%s%%'", shortItemName); + sqlSafefFrag(cond_str2, sizeof(cond_str2), "transcript like '%s%%'", shortItemName); proteinID=sqlGetField(database, "ensGtp","protein",cond_str2); if (proteinID != NULL) { printf("<B>Ensembl Protein: </B>"); printf("<A HREF=\"%s/protview?peptide=%s\" target=_blank>", ensUrl,proteinID); printf("%s</A><BR>\n", proteinID); } else { printf("<B>Ensembl Protein: </B>none (non-coding)<BR>\n"); } } if (geneName) { @@ -8588,33 +8588,33 @@ else if (isVega) safef(dbUrl, sizeof(dbUrl), "http://vega.sanger.ac.uk/%s", genomeStrEnsembl); boolean nonCoding = FALSE; char query[512]; sqlSafefFrag(query, sizeof(query), "name = \"%s\"", itemName); struct genePred *gpList = genePredReaderLoadQuery(conn, tdb->table, query); if (gpList && (gpList->cdsStart == gpList->cdsEnd)) nonCoding = TRUE; genePredFreeList(&gpList); /* get gene and protein IDs */ if ((isEnsembl && hasEnsGtp) || (isVega && hasVegaGtp)) { /* shortItemName removes version number but sometimes the ensGtp */ /* table has a transcript with version number so exact match not used */ - safef(cond_str, sizeof(cond_str), "transcript like '%s%%'", shortItemName); + sqlSafefFrag(cond_str, sizeof(cond_str), "transcript like '%s%%'", shortItemName); geneID=sqlGetField(database, gtpTable,"gene",cond_str); - safef(cond_str2, sizeof(cond_str2), "transcript like '%s%%'", shortItemName); + sqlSafefFrag(cond_str2, sizeof(cond_str2), "transcript like '%s%%'", shortItemName); proteinID=sqlGetField(database, gtpTable,"protein",cond_str2); } /* Print gene, transcript and protein links */ if (geneID != NULL) { printf("<B>%s Gene: </B>", geneType); printf("<A HREF=\"%s/geneview?gene=%s\" " "target=_blank>%s</A><BR>", dbUrl, geneID, geneID); } printf("<B>%s Transcript: </B>", geneType); printf("<A HREF=\"%s/transview?transcript=%s\" " "target=_blank>%s</A><BR>", dbUrl, shortItemName, itemName); if (proteinID != NULL) { @@ -8673,31 +8673,31 @@ else safef(headerTitle, sizeof(headerTitle), "%s", item); genericHeader(tdb, headerTitle); wordCount = chopLine(dupe, words); char *archive = trackDbSetting(tdb, "ensArchive"); if (archive == NULL) { if (dateReference[0]) { if (differentWord("current", dateReference)) archive = cloneString(dateReference); } } printEnsemblCustomUrl(tdb, itemForUrl, item == itemForUrl, archive); -sprintf(condStr, "name='%s'", item); +sqlSafefFrag(condStr, sizeof condStr, "name='%s'", item); /* if this is a non-coding gene track, then print the biotype and the external ID */ if (sameWord(tdb->table, "ensGeneNonCoding")) { struct sqlConnection *conn2 = hAllocConn(database); char query[256]; struct sqlResult *sr = NULL; char **row; sqlSafef(query, sizeof(query), "select biotype, extGeneId from %s where %s", tdb->table, condStr); sr = sqlGetResult(conn, query); if ((row = sqlNextRow(sr)) != NULL) { printf("<B>Gene Type:</B> %s<BR>\n", row[0]); @@ -8727,31 +8727,31 @@ info = ensInfoLoad(row); /* no need to print otherId field, this is the same as name 2 in the ensGene table and it is printed by showGenePos() */ /* convert the status to lower case */ tolowers(info->status); printf("<B>Ensembl Gene Type:</B> %s %s<BR>\n", info->status, info->class); printf("<B>Ensembl Gene:</B> %s<BR>\n", info->geneId); printf("<B>Ensembl Gene Description:</B> %s<BR>\n", info->geneDesc); ensInfoFree(&info); } sqlFreeResult(&sr); } /* skip the rest if this gene is not in ensGene */ -sprintf(condStr, "name='%s'", item); +sqlSafefFrag(condStr, sizeof condStr, "name='%s'", item); if (sqlGetField(database, tdb->table, "name", condStr) != NULL) { if (wordCount > 0) { type = words[0]; if (sameString(type, "genePred")) { char *pepTable = NULL, *mrnaTable = NULL; if (wordCount > 1) pepTable = words[1]; if (wordCount > 2) mrnaTable = words[2]; genericGenePredClick(conn, tdb, item, start, pepTable, mrnaTable); } } @@ -8805,74 +8805,74 @@ else { if (sameWord(organism, "rat")) { genomeStr = "rn"; } else { warn("Organism %s not found!", organism); return; } } } printf("<B>Superfamily Link: </B>"); - sprintf(supfamURL, "<A HREF=\"%s%s;seqid=%s\" target=_blank>", + safef(supfamURL, sizeof supfamURL, "<A HREF=\"%s%s;seqid=%s\" target=_blank>", url, genomeStr, itemName); printf("%s%s</A><BR><BR>\n", supfamURL, itemName); } } void doSuperfamily(struct trackDb *tdb, char *item, char *itemForUrl) /* Put up Superfamily track info. */ { struct sqlConnection *conn = hAllocConn(database); char query[256]; struct sqlResult *sr; char **row; char *chrom, *chromStart, *chromEnd; char *transcript; if (itemForUrl == NULL) itemForUrl = item; genericHeader(tdb, item); printSuperfamilyCustomUrl(tdb, itemForUrl, item == itemForUrl); if (hTableExists(database, "ensGeneXref")) { - sqlSafef(query, sizeof query, "translation_name='%s'", item); + sqlSafefFrag(query, sizeof query, "translation_name='%s'", item); transcript = sqlGetField(database, "ensGeneXref", "transcript_name", query); sqlSafef(query, sizeof query, "select chrom, chromStart, chromEnd from superfamily where name='%s';", transcript); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { chrom = row[0]; chromStart = row[1]; chromEnd = row[2]; printf("<HR>"); printPosOnChrom(chrom, atoi(chromStart), atoi(chromEnd), NULL, TRUE, transcript); } sqlFreeResult(&sr); } if (hTableExists(database, "ensemblXref3")) { - sqlSafef(query, sizeof query, "protein='%s'", item); + sqlSafefFrag(query, sizeof query, "protein='%s'", item); transcript = sqlGetField(database, "ensemblXref3", "transcript", query); sqlSafef(query, sizeof query, "select chrom, chromStart, chromEnd from superfamily where name='%s';", transcript); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { chrom = row[0]; chromStart = row[1]; chromEnd = row[2]; printf("<HR>"); printPosOnChrom(chrom, atoi(chromStart), atoi(chromEnd), NULL, TRUE, transcript); } sqlFreeResult(&sr); @@ -10326,31 +10326,31 @@ /* Put up VAX 004 info. */ { char *id; struct sqlConnection *conn = hAllocConn(database); char *aliTbl = tdb->table; int start = cartInt(cart, "o"); char cond_str[255], *subjId; genericHeader(tdb, item); id = item; printf("<H3>Sequence ID: %s", id); printf("</H3>\n"); /* display subject ID */ -sprintf(cond_str, "dnaSeqId='%s'", id); +sqlSafefFrag(cond_str, sizeof cond_str, "dnaSeqId='%s'", id); subjId = sqlGetField(database,"gsIdXref", "subjId", cond_str); printf("<H3>Subject ID: "); printf("<A HREF=\"../cgi-bin/gsidSubj?hgs_subj=%s\">", subjId); printf("%s</A>\n", subjId); printf("</H3>"); /* print alignments that track was based on */ struct psl *pslList = getAlignments(conn, aliTbl, item); printf("<H3>Genomic Alignments</H3>"); printAlignments(pslList, start, "htcCdnaAli", tdb->table, item); hFreeConn(&conn); printTrackHtml(tdb); } @@ -11256,34 +11256,34 @@ printf("<B>Multiple Alignment:</B> "); /* printf("<A HREF=\"http://www.soe.ucsc.edu/~karplus/SARS/%s/summary.html#alignment", */ printf("<A HREF=\"../SARS/%s/summary.html#alignment", itemName); printf("\" TARGET=_blank>%s</A><BR>\n", itemName); printf("<B>Secondary Structure Predictions:</B> "); /* printf("<A HREF=\"http://www.soe.ucsc.edu/~karplus/SARS/%s/summary.html#secondary-structure", */ printf("<A HREF=\"../SARS/%s/summary.html#secondary-structure", itemName); printf("\" TARGET=_blank>%s</A><BR>\n", itemName); printf("<B>3D Structure Prediction (PDB file):</B> "); gotPDBFile = 0; -safef(cond_str, sizeof(cond_str), "proteinID='%s' and evalue <1.0e-5;", itemName); +sqlSafefFrag(cond_str, sizeof(cond_str), "proteinID='%s' and evalue <1.0e-5;", itemName); if (sqlGetField(database, "protHomolog", "proteinID", cond_str) != NULL) { - safef(cond_str, sizeof(cond_str), "proteinID='%s'", itemName); + sqlSafefFrag(cond_str, sizeof(cond_str), "proteinID='%s'", itemName); predFN = sqlGetField(database, "protPredFile", "predFileName", cond_str); if (predFN != NULL) { printf("<A HREF=\"../SARS/%s/", itemName); /* printf("%s.t2k.undertaker-align.pdb\">%s</A><BR>\n", itemName,itemName); */ printf("%s\">%s</A><BR>\n", predFN,itemName); gotPDBFile = 1; } } if (!gotPDBFile) { printf("No high confidence level structure prediction available for this sequence."); printf("<BR>\n"); } printf("<B>3D Structure of Close Homologs:</B> "); @@ -11931,31 +11931,31 @@ if (*chp1 == '?') { *chp2 = '%'; chp2++; *chp2 = '3'; chp2++; *chp2 = 'F'; } else { *chp2 = *chp1; } chp1++; chp2++; } *chp2 = '\0'; - sprintf(imgFileName, "../htdocs/RNA-img/%s/%s-%s.gif", database,database,trna->name); + safef(imgFileName, sizeof imgFileName, "../htdocs/RNA-img/%s/%s-%s.gif", database,database,trna->name); if (fileExists(imgFileName)) { printf( "<img align=right src=\"../RNA-img/%s/%s-%s.gif\" alt='tRNA secondary structure for %s'>\n", database,database,encodedName,trna->name); } else { printf( "<img align=right src=\"../RNA-img/%s/%s-%s.gif\" alt='tRNA secondary structure is not available for %s'>\n", database,database,trna->name,trna->name); } printf("</TD>"); printf("</TR>"); @@ -12874,31 +12874,31 @@ cartWebStart(cart, database, "%s", tdb->longLabel); printf("<B>%s position:</B> <a target=\"_blank\" href=\"%s?db=%s&position=%s%%3A%d-%d\">%s:%d-%d</a><BR>\n", otherOrg, hgTracksName(), otherDb, psl->qName, psl->qStart+1, psl->qEnd, psl->qName, psl->qStart+1, psl->qEnd); printf("<B>%s size:</B> %d<BR>\n", otherOrg, psl->qEnd - psl->qStart); printf("<B>%s position:</B> %s:%d-%d<BR>\n", thisOrg, psl->tName, psl->tStart+1, psl->tEnd); printf("<B>%s size:</B> %d<BR>\n", thisOrg, psl->tEnd - psl->tStart); printf("<B>Identical Bases:</B> %d<BR>\n", psl->match + psl->repMatch); printf("<B>Number of Gapless Aligning Blocks:</B> %d<BR>\n", psl->blockCount ); printf("<B>Percent identity within gapless aligning blocks:</B> %3.1f%%<BR>\n", 0.1*(1000 - pslCalcMilliBad(psl, FALSE))); printf("<B>Strand:</B> %s<BR>\n",psl->strand); printf("<B>Browser window position:</B> %s:%d-%d<BR>\n", seqName, winStart+1, winEnd); printf("<B>Browser window size:</B> %d<BR>\n", winEnd - winStart); -sprintf(otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s&otherDb=%s", psl->tStart, +safef(otherString, sizeof otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s&otherDb=%s", psl->tStart, pslTableName, otherOrg, otherChromTable, otherDb); if (pslTrimToTargetRange(psl, winStart, winEnd) != NULL) { hgcAnchorSomewhere("htcLongXenoPsl2", cgiItem, otherString, psl->tName); printf("<BR>View details of parts of alignment within browser window</A>.<BR>\n"); } freez(&cgiItem); } /* Multipurpose function to show alignments in details pages where applicable */ void longXenoPsl1(struct trackDb *tdb, char *item, char *otherOrg, char *otherChromTable, char *otherDb) @@ -12914,31 +12914,31 @@ psl = loadPslFromRangePair(tdb->table, item); printf("<B>%s position:</B> <a target=\"_blank\" href=\"%s?db=%s&position=%s%%3A%d-%d\">%s:%d-%d</a><BR>\n", otherOrg, hgTracksName(), otherDb, psl->qName, psl->qStart+1, psl->qEnd, psl->qName, psl->qStart+1, psl->qEnd); printf("<B>%s size:</B> %d<BR>\n", otherOrg, psl->qEnd - psl->qStart); printf("<B>%s position:</B> %s:%d-%d<BR>\n", thisOrg, psl->tName, psl->tStart+1, psl->tEnd); printf("<B>%s size:</B> %d<BR>\n", thisOrg, psl->tEnd - psl->tStart); printf("<B>Identical Bases:</B> %d<BR>\n", psl->match + psl->repMatch); printf("<B>Number of Gapless Aligning Blocks:</B> %d<BR>\n", psl->blockCount ); printf("<B>Percent identity within gapless aligning blocks:</B> %3.1f%%<BR>\n", 0.1*(1000 - pslCalcMilliBad(psl, FALSE))); printf("<B>Strand:</B> %s<BR>\n",psl->strand); printf("<B>Browser window position:</B> %s:%d-%d<BR>\n", seqName, winStart+1, winEnd); printf("<B>Browser window size:</B> %d<BR>\n", winEnd - winStart); -sprintf(otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s&otherDb=%s", psl->tStart, +safef(otherString, sizeof otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s&otherDb=%s", psl->tStart, tdb->table, otherOrg, otherChromTable, otherDb); /* joni */ if (pslTrimToTargetRange(psl, winStart, winEnd) != NULL) { hgcAnchorSomewhere("htcLongXenoPsl2", cgiItem, otherString, psl->tName); printf("<BR>View details of parts of alignment within browser window</A>.<BR>\n"); } if (containsStringNoCase(otherDb, "zoo")) printf("<P><A HREF='%s&db=%s'>Go to the browser view of the %s</A><BR>\n", hgTracksPathAndSettings(), otherDb, otherOrg); printTrackHtml(tdb); freez(&cgiItem); } @@ -12958,31 +12958,31 @@ cartWebStart(cart, database, "%s", tdb->longLabel); psl = loadPslFromRangePair(tdb->table, item); printf("<B>%s position:</B> %s:%d-%d<BR>\n", otherOrg, psl->qName, psl->qStart+1, psl->qEnd); printf("<B>%s size:</B> %d<BR>\n", otherOrg, psl->qEnd - psl->qStart); printf("<B>%s position:</B> %s:%d-%d<BR>\n", thisOrg, psl->tName, psl->tStart+1, psl->tEnd); printf("<B>%s size:</B> %d<BR>\n", thisOrg, psl->tEnd - psl->tStart); printf("<B>Identical Bases:</B> %d<BR>\n", psl->match + psl->repMatch); printf("<B>Number of Gapless Aligning Blocks:</B> %d<BR>\n", psl->blockCount ); printf("<B>Percent identity within gapless aligning blocks:</B> %3.1f%%<BR>\n", 0.1*(1000 - pslCalcMilliBad(psl, FALSE))); printf("<B>Strand:</B> %s<BR>\n",psl->strand); printf("<B>Browser window position:</B> %s:%d-%d<BR>\n", seqName, winStart+1, winEnd); printf("<B>Browser window size:</B> %d<BR>\n", winEnd - winStart); -sprintf(otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s&otherDb=%s", psl->tStart, +safef(otherString, sizeof otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s&otherDb=%s", psl->tStart, tdb->table, otherOrg, otherChromTable, otherDb); printCustomUrl(tdb, item, TRUE); printTrackHtml(tdb); freez(&cgiItem); } void longXenoPsl1zoo2(struct trackDb *tdb, char *item, char *otherOrg, char *otherChromTable) /* Put up cross-species alignment when the second species * sequence is in a nib file. */ { struct psl *psl = NULL; char otherString[256]; char anotherString[256]; @@ -12993,36 +12993,36 @@ psl = loadPslFromRangePair(tdb->table, item); printf("<B>%s position:</B> %s:%d-%d<BR>\n", otherOrg, psl->qName, psl->qStart+1, psl->qEnd); printf("<B>%s size:</B> %d<BR>\n", otherOrg, psl->qEnd - psl->qStart); printf("<B>%s position:</B> %s:%d-%d<BR>\n", thisOrg, psl->tName, psl->tStart+1, psl->tEnd); printf("<B>%s size:</B> %d<BR>\n", thisOrg, psl->tEnd - psl->tStart); printf("<B>Identical Bases:</B> %d<BR>\n", psl->match + psl->repMatch); printf("<B>Number of Gapless Aligning Blocks:</B> %d<BR>\n", psl->blockCount ); printf("<B>Strand:</B> %s<BR>\n",psl->strand); printf("<B>Percent identity within gapless aligning blocks:</B> %3.1f%%<BR>\n", 0.1*(1000 - pslCalcMilliBad(psl, FALSE))); printf("<B>Browser window position:</B> %s:%d-%d<BR>\n", seqName, winStart, winEnd); printf("<B>Browser window size:</B> %d<BR>\n", winEnd - winStart); -sprintf(anotherString, "%s",otherOrg); +safef(anotherString, sizeof anotherString, "%s",otherOrg); toUpperN(anotherString,1); printf("Link to <a href=\"http://hgwdev-tcbruen.cse.ucsc.edu/cgi-bin/hgTracks?db=zoo%s1&position=chr1:%d-%d\">%s database</a><BR>\n", anotherString, psl->qStart, psl->qEnd, otherOrg); -sprintf(otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s", psl->tStart, +safef(otherString, sizeof otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s", psl->tStart, tdb->table, otherOrg, otherChromTable); if (pslTrimToTargetRange(psl, winStart, winEnd) != NULL) { hgcAnchorSomewhere("htcLongXenoPsl2", cgiItem, otherString, psl->tName); printf("<BR>View details of parts of alignment within browser window</A>.<BR>\n"); } printTrackHtml(tdb); freez(&cgiItem); } void doAlignmentOtherDb(struct trackDb *tdb, char *item) /* Put up cross-species alignment when the second species * is another db, indicated by the 3rd word of tdb->type. */ { char *otherOrg; @@ -13046,31 +13046,31 @@ /* Check to see if name is one of zoo names */ if (!(strcmp(otherName,"human") && strcmp(otherName,"chimp") && strcmp(otherName,"baboon") && strcmp(otherName,"cow") && strcmp(otherName,"pig") && strcmp(otherName,"cat") && strcmp(otherName,"dog") && strcmp(otherName,"mouse") && strcmp(otherName,"rat") && strcmp(otherName,"chicken") && strcmp(otherName,"fugu") && strcmp(otherName,"tetra") && strcmp(otherName,"zebrafish"))) { - sprintf( chromStr, "%sChrom" , otherName ); + safef( chromStr, sizeof chromStr, "%sChrom" , otherName ); longXenoPsl1zoo2(tdb, item, otherName, chromStr ); } } struct chain *getChainFromRange(char *chainTable, char *chrom, int chromStart, int chromEnd) /* get a list of chains for a range */ { char chainTable_chrom[256]; struct dyString *dy = newDyString(128); struct chain *chainList = NULL; struct sqlConnection *conn = hAllocConn(database); safef(chainTable_chrom, 256, "%s_%s",chrom, chainTable); if (hTableExists(database, chainTable_chrom) ) @@ -13113,30 +13113,31 @@ } sqlFreeResult(&sr); } return chainList; } void htcPseudoGene(char *htcCommand, char *item) /* Interface for selecting & displaying alignments from axtInfo * for an item from a genePred table. */ { struct genePred *gp = NULL; struct axtInfo *aiList = NULL; struct axt *axtList = NULL; struct sqlResult *sr; char **row; +char trackTemp[256]; char *track = cartString(cart, "o"); char *chrom = cartString(cart, "c"); char *name = cartOptionalString(cart, "i"); char *db2 = cartString(cart, "db2"); int tStart = cgiInt("l"); int tEnd = cgiInt("r"); char *qChrom = cgiOptionalString("qc"); int chainId = cgiInt("ci"); int qStart = cgiInt("qs"); int qEnd = cgiInt("qe"); char table[64]; char query[512]; char nibFile[512]; char qNibFile[512]; char qNibDir[512]; @@ -13199,42 +13200,45 @@ db2, table, name, qChrom, qStart+1, qEnd, query); /* extract nib directory from nibfile */ if (strrchr(nibFile,'/') != NULL) strncpy(tNibDir, nibFile, strlen(nibFile)-strlen(strrchr(nibFile,'/'))); else errAbort("Cannot find nib directory for %s\n",nibFile); tNibDir[strlen(nibFile)-strlen(strrchr(nibFile,'/'))] = '\0'; if (strrchr(qNibFile,'/') != NULL) strncpy(qNibDir, qNibFile, strlen(qNibFile)-strlen(strrchr(qNibFile,'/'))); else errAbort("Cannot find nib directory for %s\n",qNibFile); qNibDir[strlen(qNibFile)-strlen(strrchr(qNibFile,'/'))] = '\0'; -sprintf(path, "%s/%s.nib", tNibDir, chrom); +safef(path, sizeof path, "%s/%s.nib", tNibDir, chrom); /* load chain */ if (sameString(database,db2)) { - strcpy(track, "selfChain"); + track = "selfChain"; if (!hTableExists(database, "chr1_selfChain")) - strcpy(track, "chainSelf"); + track = "chainSelf"; } else - sprintf(track, "%sChain",hOrganism(db2)); -track[0] = tolower(track[0]); + { + safef(trackTemp, sizeof trackTemp, "%sChain",hOrganism(db2)); + trackTemp[0] = tolower(trackTemp[0]); + track = trackTemp; + } if (chainId > 0 ) { chain = chainDbLoad(conn, database, track, chrom, chainId); /* get list of axts for a chain */ AllocVar(fill); fill->qName = cloneString(qChrom); fill->tSize = tEnd-tStart; fill->tStart = tStart; fill->chainId = chainId; fill->qSize = gp->txEnd - gp->txStart; fill->qStart = max(qStart, gp->txStart); fill->children = NULL; fill->next = NULL; fill->qStrand = chain->qStrand; @@ -13530,31 +13534,31 @@ struct stsMap stsRow; struct stsInfo *infoRow = NULL; struct stsInfo2 *info2Row = NULL; char stsid[20]; int i; struct psl *pslList = NULL, *psl; int pslStart; char *sqlMarker = marker; boolean hasBin; /* Make sure to escpae single quotes for DB parseability */ if (strchr(marker, '\'')) sqlMarker = replaceChars(marker, "'", "''"); /* Print out non-sequence info */ -sprintf(title, "STS Marker %s", marker); +safef(title, sizeof title, "STS Marker %s", marker); cartWebStart(cart, database, "%s", title); /* Find the instance of the object in the bed table */ sqlSafef(query, sizeof query, "SELECT * FROM %s WHERE name = '%s' " "AND chrom = '%s' AND chromStart = %d " "AND chromEnd = %d", table, sqlMarker, seqName, start, end); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); hasBin = hOffsetPastBin(database, seqName, table); if (row != NULL) { if (stsMapExists) stsMapStaticLoad(row+hasBin, &stsRow); else @@ -13731,38 +13735,38 @@ hasBin = hOffsetPastBin(database, seqName, "all_sts_seq"); i = 0; pslStart = 0; while ((row = sqlNextRow(sr1)) != NULL) { psl = pslLoad(row+hasBin); if ((sameString(psl->tName, seqName)) && (abs(psl->tStart - start) < 1000)) pslStart = psl->tStart; slAddHead(&pslList, psl); i++; } slReverse(&pslList); if (i > 0) { printf("<H3>Full sequence:</H3>\n"); - sprintf(stsid,"%d",infoRow->identNo); + safef(stsid, sizeof stsid, "%d", infoRow->identNo); printAlignments(pslList, pslStart, "htcCdnaAli", "all_sts_seq", stsid); sqlFreeResult(&sr1); htmlHorizontalLine(); } slFreeList(&pslList); /* Print out alignment information - primers */ - sprintf(stsid,"dbSTS_%d",infoRow->dbSTSid); + safef(stsid, sizeof stsid, "dbSTS_%d", infoRow->dbSTSid); sqlSafef(query, sizeof query, "SELECT * FROM all_sts_primer WHERE qName = '%s'", stsid); hasBin = hOffsetPastBin(database, seqName, "all_sts_primer"); sr1 = sqlGetResult(conn1, query); i = 0; pslStart = 0; while ((row = sqlNextRow(sr1)) != NULL) { psl = pslLoad(row+hasBin); if ((sameString(psl->tName, seqName)) && (abs(psl->tStart - start) < 1000)) pslStart = psl->tStart; slAddHead(&pslList, psl); i++; } slReverse(&pslList); @@ -13851,31 +13855,31 @@ struct sqlConnection *conn = hAllocConn(database); struct sqlConnection *conn1 = hAllocConn(database); struct sqlResult *sr = NULL, *sr1 = NULL; char **row; int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); int hgsid = cartSessionId(cart); struct stsMapMouse stsRow; struct stsInfoMouse *infoRow; char stsid[20]; int i; struct psl *pslList = NULL, *psl; int pslStart; /* Print out non-sequence info */ -sprintf(title, "STS Marker %s", marker); +safef(title, sizeof title, "STS Marker %s", marker); cartWebStart(cart, database, "%s", title); /* Find the instance of the object in the bed table */ sqlSafef(query, sizeof query, "SELECT * FROM %s WHERE name = '%s' " "AND chrom = '%s' AND chromStart = %d " "AND chromEnd = %d", table, marker, seqName, start, end); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { stsMapMouseStaticLoad(row, &stsRow); /* Find the instance of the object in the stsInfo table */ sqlFreeResult(&sr); sqlSafef(query, sizeof query, "SELECT * FROM stsInfoMouse WHERE identNo = '%d'", stsRow.identNo); @@ -13902,31 +13906,31 @@ printf("<TR><TH ALIGN=left>Left Primer:</TH><TD>%s</TD></TR>\n",infoRow->primer1); printf("<TR><TH ALIGN=left>Right Primer:</TH><TD>%s</TD></TR>\n",infoRow->primer2); printf("<TR><TH ALIGN=left>Distance:</TH><TD>%s bps</TD></TR>\n",infoRow->distance); printf("</TABLE>\n"); htmlHorizontalLine(); /* Print out information from genetic maps for this marker */ printf("<H3>Genetic Map Position</H3>\n"); printf("<TABLE>\n"); printf("<TH> </TH><TH ALIGN=left WIDTH=150>Name</TH><TH ALIGN=left WIDTH=150>Chromosome</TH><TH ALIGN=left WIDTH=150>Position</TH></TR>\n"); printf("<TH ALIGN=left> </TH><TD WIDTH=150>%s</TD><TD WIDTH=150>%s</TD><TD WIDTH=150>%.2f</TD></TR>\n", infoRow->stsMarkerName, infoRow->Chr, infoRow->geneticPos); printf("</TABLE><P>\n"); /* Print out alignment information - full sequence */ webNewSection("Genomic Alignments:"); - sprintf(stsid,"%d",infoRow->MGIPrimerID); + safef(stsid, sizeof stsid, "%d", infoRow->MGIPrimerID); sqlSafef(query, sizeof query, "SELECT * FROM all_sts_primer" " WHERE qName = '%s' AND tStart = '%d' AND tEnd = '%d'",stsid, start, end); sr1 = sqlGetResult(conn1, query); i = 0; pslStart = 0; while ((row = sqlNextRow(sr1)) != NULL) { psl = pslLoad(row); if ((sameString(psl->tName, seqName)) && (abs(psl->tStart - start) < 1000)) pslStart = psl->tStart; slAddHead(&pslList, psl); i++; } slReverse(&pslList); if (i > 0) @@ -13983,32 +13987,32 @@ int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); int hgsid = cartSessionId(cart); struct stsMapMouseNew stsRow; struct stsInfoMouseNew *infoRow; char stsid[20]; char stsPrimer[40]; char stsClone[45]; int i; struct psl *pslList = NULL, *psl; int pslStart; char sChar='%'; /* Print out non-sequence info */ -sprintf(title, "STS Marker %s\n", marker); -/* sprintf(title, "STS Marker <A HREF=\"http://www.informatics.jax.org/searches/marker_report.cgi?string\%%3AmousemarkerID=%s\" TARGET=_BLANK>%s</A>\n", marker, marker); */ +safef(title, sizeof title, "STS Marker %s\n", marker); +/* safef(title, sizeof title, "STS Marker <A HREF=\"http://www.informatics.jax.org/searches/marker_report.cgi?string\%%3AmousemarkerID=%s\" TARGET=_BLANK>%s</A>\n", marker, marker); */ cartWebStart(cart, database, "%s", title); /* Find the instance of the object in the bed table */ sqlSafef(query, sizeof query, "SELECT * FROM %s WHERE name = '%s' " "AND chrom = '%s' AND chromStart = %d " "AND chromEnd = %d", table, marker, seqName, start, end); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) { stsMapMouseNewStaticLoad(row, &stsRow); /* Find the instance of the object in the stsInfo table */ sqlFreeResult(&sr); sqlSafef(query, sizeof query, "SELECT * FROM stsInfoMouseNew WHERE identNo = '%d'", stsRow.identNo); @@ -14058,33 +14062,33 @@ { printf("<TR><TH> </TH><TH ALIGN=left WIDTH=150>Name</TH><TH ALIGN=left WIDTH=150>Chromosome</TH><TH ALIGN=left WIDTH=150>Position</TH></TR>\n"); printf("<TR><TH ALIGN=left> </TH><TD WIDTH=150>%s</TD><TD WIDTH=150>%s</TD><TD WIDTH=150>%.2f</TD></TR>\n", infoRow->mgiName, infoRow->mgiChr, infoRow->mgiGeneticPos); } if (strcmp(infoRow->rhName, "")) { printf("<TR><TH> </TH><TH ALIGN=left WIDTH=150>Name</TH><TH ALIGN=left WIDTH=150>Chromosome</TH><TH ALIGN=left WIDTH=150>Position</TH><TH ALIGN=left WIDTH=150>Score</TH?</TR>\n"); printf("<TR><TH ALIGN=left> </TH><TD WIDTH=150>%s</TD><TD WIDTH=150>%s</TD><TD WIDTH=150>%.2f</TD><TD WIDTH=150>%.2f</TD></TR>\n", infoRow->rhName, infoRow->rhChr, infoRow->rhGeneticPos, infoRow->RHLOD); } printf("</TABLE><P>\n"); /* Print out alignment information - full sequence */ webNewSection("Genomic Alignments:"); - sprintf(stsid,"%d",infoRow->identNo); - sprintf(stsPrimer, "%d_%s", infoRow->identNo, infoRow->name); - sprintf(stsClone, "%d_%s_clone", infoRow->identNo, infoRow->name); + safef(stsid, sizeof stsid, "%d", infoRow->identNo); + safef(stsPrimer, sizeof stsPrimer, "%d_%s", infoRow->identNo, infoRow->name); + safef(stsClone, sizeof stsClone, "%d_%s_clone", infoRow->identNo, infoRow->name); /* find sts in primer alignment info */ sqlSafef(query, sizeof query, "SELECT * FROM all_sts_primer WHERE qName = '%s' AND tStart = '%d' " "AND tEnd = '%d'",stsPrimer, start, end); sr1 = sqlGetResult(conn1, query); i = 0; pslStart = 0; while ((row = sqlNextRow(sr1)) != NULL ) { psl = pslLoad(row); fflush(stdout); if ((sameString(psl->tName, seqName)) && (abs(psl->tStart - start) < 1000)) pslStart = psl->tStart; slAddHead(&pslList, psl); i++; @@ -14169,31 +14173,31 @@ char **row; int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); int hgsid = cartSessionId(cart); struct stsMapRat stsRow; struct stsInfoRat *infoRow; char stsid[20]; char stsPrimer[40]; char stsClone[45]; int i; struct psl *pslList = NULL, *psl; int pslStart; boolean hasBin = FALSE; /* Print out non-sequence info */ -sprintf(title, "STS Marker %s", marker); +safef(title, sizeof title, "STS Marker %s", marker); cartWebStart(cart, database, "%s", title); /* Find the instance of the object in the bed table */ sqlSafefFrag(query, sizeof(query), "name = '%s'", marker); sr = hRangeQuery(conn, table, seqName, start, end, query, &hasBin); row = sqlNextRow(sr); if (row != NULL) { stsMapRatStaticLoad(row+hasBin, &stsRow); /* Find the instance of the object in the stsInfo table */ sqlFreeResult(&sr); sqlSafef(query, sizeof query, "SELECT * FROM stsInfoRat WHERE identNo = '%d'", stsRow.identNo); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) @@ -14239,33 +14243,33 @@ { printf("<TR><TH> </TH><TH ALIGN=left WIDTH=150>Name</TH><TH ALIGN=left WIDTH=150>Chromosome</TH><TH ALIGN=left WIDTH=150>Position</TH></TR>\n"); printf("<TR><TH ALIGN=left> </TH><TD WIDTH=150>%s</TD><TD WIDTH=150>%s</TD><TD WIDTH=150>%.2f</TD></TR>\n", infoRow->shrspName, infoRow->shrspChr, infoRow->shrspGeneticPos); } if(strcmp(infoRow->rhName, "")) { printf("<TR><TH> </TH><TH ALIGN=left WIDTH=150>Name</TH><TH ALIGN=left WIDTH=150>Chromosome</TH><TH ALIGN=left WIDTH=150>Position</TH><TH ALIGN=left WIDTH=150>Score</TH?</TR>\n"); printf("<TR><TH ALIGN=left> </TH><TD WIDTH=150>%s</TD><TD WIDTH=150>%s</TD><TD WIDTH=150>%.2f</TD><TD WIDTH=150>%.2f</TD></TR>\n", infoRow->rhName, infoRow->rhChr, infoRow->rhGeneticPos, infoRow->RHLOD); } printf("</TABLE><P>\n"); /* Print out alignment information - full sequence */ webNewSection("Genomic Alignments:"); - sprintf(stsid,"%d",infoRow->identNo); - sprintf(stsPrimer, "%d_%s", infoRow->identNo, infoRow->name); - sprintf(stsClone, "%d_%s_clone", infoRow->identNo, infoRow->name); + safef(stsid, sizeof stsid, "%d", infoRow->identNo); + safef(stsPrimer, sizeof stsPrimer, "%d_%s", infoRow->identNo, infoRow->name); + safef(stsClone, sizeof stsClone, "%d_%s_clone", infoRow->identNo, infoRow->name); /* find sts in primer alignment info */ sqlSafefFrag(query, sizeof(query), "qName = '%s'", stsPrimer); sr1 = hRangeQuery(conn1, "all_sts_primer", seqName, start, end, query, &hasBin); i = 0; pslStart = 0; while ((row = sqlNextRow(sr1)) != NULL ) { psl = pslLoad(row+hasBin); fflush(stdout); if ((sameString(psl->tName, seqName)) && (abs(psl->tStart - start) < 1000)) pslStart = psl->tStart; slAddHead(&pslList, psl); i++; @@ -17410,31 +17414,31 @@ if (id == NULL) { animal = "human"; id = item; } else *id++ = 0; if (sameString(animal, "cow")) animal = "cattle"; else if (sameString(animal, "chicken")) animal = "g_gallus"; else if (sameString(animal, "Dmelano")) animal = "drosoph"; -sprintf(buf, "species=%s&tc=%s ", animal, id); +safef(buf, sizeof buf, "species=%s&tc=%s ", animal, id); genericClickHandler(tdb, item, buf); } void doJaxQTL(struct trackDb *tdb, char *item) /* Put up info on Quantitative Trait Locus from Jackson Lab. */ { struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr; char query[512]; char **row; int start = cartInt(cart, "o"); boolean isBed4 = startsWith("bed 4", tdb->type); boolean hasBin = hIsBinned(database, tdb->table); genericHeader(tdb, item); @@ -18292,79 +18296,79 @@ char *lfLabel = NULL; char *table = NULL; char *intName = NULL; char pslTable[64]; int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); int length = end - start; int i; struct lfs *lfs; struct psl *pslList = NULL, *psl; boolean hasBin = hOffsetPastBin(database, seqName, track); /* Determine type */ if (sameString("bacEndPairs", track)) { - sprintf(title, "Location of %s using BAC end sequences", clone); + safef(title, sizeof title, "Location of %s using BAC end sequences", clone); lfLabel = "BAC ends"; table = track; } if (sameString("bacEndSingles", track)) { - sprintf(title, "Location of %s using BAC end sequences", clone); + safef(title, sizeof title, "Location of %s using BAC end sequences", clone); lfLabel = "BAC ends"; table = track; } if (sameString("bacEndPairsBad", track)) { - sprintf(title, "Location of %s using BAC end sequences", clone); + safef(title, sizeof title, "Location of %s using BAC end sequences", clone); lfLabel = "BAC ends"; table = track; } if (sameString("bacEndPairsLong", track)) { - sprintf(title, "Location of %s using BAC end sequences", clone); + safef(title, sizeof title, "Location of %s using BAC end sequences", clone); lfLabel = "BAC ends"; table = track; } if (sameString("fosEndPairs", track)) { - sprintf(title, "Location of %s using fosmid end sequences", clone); + safef(title, sizeof title, "Location of %s using fosmid end sequences", clone); lfLabel = "Fosmid ends"; table = track; } if (sameString("fosEndPairsBad", track)) { - sprintf(title, "Location of %s using fosmid end sequences", clone); + safef(title, sizeof title, "Location of %s using fosmid end sequences", clone); lfLabel = "Fosmid ends"; table = track; } if (sameString("fosEndPairsLong", track)) { - sprintf(title, "Location of %s using fosmid end sequences", clone); + safef(title, sizeof title, "Location of %s using fosmid end sequences", clone); lfLabel = "Fosmid ends"; table = track; } if (sameString("earlyRep", track)) { - sprintf(title, "Location of %s using cosmid end sequences", clone); + safef(title, sizeof title, "Location of %s using cosmid end sequences", clone); lfLabel = "Early Replication Cosmid Ends"; table = track; } if (sameString("earlyRepBad", track)) { - sprintf(title, "Location of %s using cosmid end sequences", clone); + safef(title, sizeof title, "Location of %s using cosmid end sequences", clone); lfLabel = "Early Replication Cosmid Ends"; table = track; } /* Print out non-sequence info */ cartWebStart(cart, database, "%s", title); /* Find the instance of the object in the bed table */ sqlSafef(query, sizeof query, "SELECT * FROM %s WHERE name = '%s' " "AND chrom = '%s' AND chromStart = %d " "AND chromEnd = %d", table, clone, seqName, start, end); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if (row != NULL) @@ -18441,31 +18445,31 @@ else { printBand(seqName, start, end, TRUE); printf("</TABLE>\n"); printf("<P><HR ALIGN=\"CENTER\"></P>\n"); } if (lfs->score == 1000) { printf("<H4>This is the only location found for %s</H4>\n",clone); } else { //printOtherLFS(clone, table, start, end); } - sprintf(title, "Genomic alignments of %s:", lfLabel); + safef(title, sizeof title, "Genomic alignments of %s:", lfLabel); webNewSection(title); for (i = 0; i < lfs->lfCount; i++) { sqlFreeResult(&sr); hFindSplitTable(database, seqName, lfs->pslTable, pslTable, &hasBin); sqlSafef(query, sizeof query, "SELECT * FROM %s WHERE qName = '%s'", pslTable, lfs->lfNames[i]); sr = sqlMustGetResult(conn, query); while ((row1 = sqlNextRow(sr)) != NULL) { psl = pslLoad(row1+hasBin); slAddHead(&pslList, psl); } slReverse(&pslList); @@ -18811,31 +18815,31 @@ } void doMcnBreakpoints(char *track, char *name, struct trackDb *tdb) /* Create detail page for MCN breakpoints track */ { char query[256]; char title[256]; struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr = NULL; int start = cartInt(cart, "o"); int end = cartInt(cart, "t"); char **row; struct mcnBreakpoints *mcnRecord; /* Print out non-sequence info */ -sprintf(title, "MCN Breakpoints - %s",name); +safef(title, sizeof title, "MCN Breakpoints - %s",name); cartWebStart(cart, database, "%s", title); /* Print general range info */ /*printf("<H2>MCN Breakpoints - %s</H2>\n", name); printf("<P><HR ALIGN=\"CENTER\"></P>");*/ printf("<TABLE>\n"); printf("<TR><TH ALIGN=left>Chromosome:</TH><TD>%s</TD></TR>\n",seqName); printf("<TR><TH ALIGN=left>Begin in Chromosome:</TH><TD>%d</TD></TR>\n",start); printf("<TR><TH ALIGN=left>End in Chromosome:</TH><TD>%d</TD></TR>\n",end); printBand(seqName, start, end, TRUE); printf("</TABLE>\n"); /* Find all of the breakpoints in this range for this name*/ sqlSafef(query, sizeof query, "SELECT * FROM mcnBreakpoints WHERE chrom = '%s' AND " "chromStart = %d and chromEnd = %d AND name = '%s'", @@ -19361,31 +19365,31 @@ slAddHead(&sgList,sg); } sqlFreeResult(&sr); hFreeConn(&sc); slReverse(&sgList); freeDyString(&query); return sgList; } int sageBedWSListIndex(struct bed *bedList, int uni) /* find the index of a bed by the unigene identifier in a bed list */ { struct bed *bed; int count =0; char buff[128]; -sprintf(buff,"Hs.%d",uni); +safef(buff, sizeof buff, "Hs.%d", uni); for(bed = bedList; bed != NULL; bed = bed->next) { if(sameString(bed->name,buff)) return count; count++; } errAbort("Didn't find the unigene tag %s",buff); return 0; } int sortSageByBedOrder(const void *e1, const void *e2) /* used by slSort to sort the sage experiment data using the order of the beds */ { const struct sage *s1 = *((struct sage**)e1); const struct sage *s2 = *((struct sage**)e2); @@ -19426,47 +19430,47 @@ struct sage *sgList=NULL, *sg=NULL; int featureCount; int count=0; seList=loadSageExps("sageExp",bedList); sgList = loadSageData("sage", bedList); slSort(&sgList,sortSageByBedOrder); printSageReference(sgList, tdb); /* temporarily disable this link until debugged and fixed. Fan printSageGraphUrl(sgList); */ printf("<BR>\n"); for(sg=sgList; sg != NULL; sg = sg->next) { char buff[256]; - sprintf(buff,"Hs.%d",sg->uni); + safef(buff, sizeof buff, "Hs.%d", sg->uni); } featureCount= slCount(sgList); printf("<basefont size=-1>\n"); printf("<table cellspacing=0 style='border:1px solid black;'>\n"); printf("<tr>\n"); printf("<th align=center>Sage Experiment</th>\n"); printf("<th align=center>Tissue</th>\n"); printf("<th align=center colspan=%d valign=top>Uni-Gene Clusters<br>(<b>Median</b> [Ave ± Stdev])</th>\n",featureCount); printf("</tr>\n<tr><td> </td><td> </td>\n"); for(sg = sgList; sg != NULL; sg = sg->next) { char buff[32]; char url[256]; - sprintf(buff,"Hs.%d",sg->uni); + safef(buff, sizeof buff, "Hs.%d", sg->uni); printf("<td valign=top align=center>\n"); - sprintf(url, "http://www.ncbi.nlm.nih.gov/SAGE/SAGEcid.cgi?cid=%d&org=Hs",sg->uni); + safef(url, sizeof url, "http://www.ncbi.nlm.nih.gov/SAGE/SAGEcid.cgi?cid=%d&org=Hs",sg->uni); printTableHeaderName(buff, itemName, url); printf("</td>"); } printf("</tr>\n"); /* for each experiment write out the name and then all of the values */ for(se=seList;se!=NULL;se=se->next) { char *tmp; tmp = strstr(se->exp,"_"); if(++count%2) printf("<tr>\n"); else printf("<tr bgcolor=\"#bababa\">\n"); printf("<td align=left>"); printf("%s</td>\n", tmp ? (tmp+1) : se->exp); @@ -19532,34 +19536,34 @@ printf("<h2>Sage Data for: %s %d-%d</h2>\n", seqName, winStart+1, winEnd); puts("<table cellpadding=0 cellspacing=0><tr><td>\n"); sgList = bedWScoreLoadByChrom(tableName, seqName, winStart, winEnd); sgCount = slCount(sgList); if(sgCount > 50) printf("<hr><p>That will create too big of a table, try creating a window with less than 50 elements.<hr>\n"); else { sageExpList = sgList; sagePrintTable(sgList, itemName, tdb); } printf("</td></tr></table>\n"); /*zeroBytes(buff,64); - sprintf(buff,"%d",winStart); + safe(buff, sizeof buff, "%d", winStart); cgiMakeHiddenVar("winStart", buff); zeroBytes(buff,64); - sprintf(buff,"%d",winEnd); + safef(buff, sizeof buff, "%d", winEnd); cgiMakeHiddenVar("winEnd", buff); cgiMakeHiddenVar("db",database); printf("<br>\n");*/ chuckHtmlContactInfo(); } void makeGrayShades(struct hvGfx *hvg) /* Make eight shades of gray in display. */ { int i; for (i=0; i<=maxShade; ++i) { struct rgbColor rgb; int level = 255 - (255*i/maxShade); if (level < 0) level = 0; @@ -19799,33 +19803,34 @@ { char *path = hExtFileName(database, "extFile", extFileId); struct lineFile *lf = lineFileOpen(path, TRUE); freeMem(path); return lf; } void printSampleWindow( struct psl *thisPsl, int thisWinStart, int thisWinEnd, char *winStr, char *otherOrg, char *otherDb, char *pslTableName ) { char otherString[256]; char pslItem[1024]; char *cgiPslItem; -sprintf( pslItem, "%s:%d-%d %s:%d-%d", thisPsl->qName, thisPsl->qStart, thisPsl->qEnd, thisPsl->tName, thisPsl->tStart, thisPsl->tEnd ); +safef(pslItem, sizeof pslItem, "%s:%d-%d %s:%d-%d", + thisPsl->qName, thisPsl->qStart, thisPsl->qEnd, thisPsl->tName, thisPsl->tStart, thisPsl->tEnd ); cgiPslItem = cgiEncode(pslItem); -sprintf(otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s&otherDb=%s", thisPsl->tStart, +safef(otherString, sizeof otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s&otherDb=%s", thisPsl->tStart, pslTableName, otherOrg, "chromInfo" , otherDb ); if (pslTrimToTargetRange(thisPsl, thisWinStart, thisWinEnd) != NULL) { hgcAnchorWindow("htcLongXenoPsl2", cgiPslItem, thisWinStart, thisWinEnd, otherString, thisPsl->tName); printf("%s</A>\n", winStr ); } } void firstAndLastPosition( int *thisStart, int *thisEnd, struct psl *thisPsl ) /*return the first and last base of a psl record (not just chromStart * and chromEnd but the actual blocks.*/ { *thisStart = thisPsl->tStarts[0]; @@ -19900,50 +19905,50 @@ int left = cartIntExp( cart, "l" ); int right = cartIntExp( cart, "r" ); char *winOn = cartUsualString( cart, "win", "F" ); hFindSplitTable(database, seqName, tdb->table, table, &hasBin); sqlSafef(query, sizeof query, "select * from %s where name = '%s' and chrom = '%s'", table, item, seqName); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { if (firstTime) firstTime = FALSE; else htmlHorizontalLine(); smp = sampleLoad(row+hasBin); - sprintf( tempTableName, "%s_%s", smp->chrom, pslTableName ); + safef(tempTableName, sizeof tempTableName, "%s_%s", smp->chrom, pslTableName ); hFindSplitTable(database, seqName, pslTableName, table, &hasBin); sqlSafef(query, sizeof query, "select * from %s where tName = '%s' and tEnd >= %d and tStart <= %d" , table, smp->chrom, smp->chromStart+smp->samplePosition[0] , smp->chromStart+smp->samplePosition[smp->sampleCount-1] ); pslSr = sqlGetResult(conn2, query); if(!sameString(winOn,"T")) { while(( pslRow = sqlNextRow(pslSr)) != NULL ) { thisPsl = pslLoad( pslRow+hasBin ); firstAndLastPosition( &thisStart, &thisEnd, thisPsl ); snprintf(thisItem, 256, "%s:%d-%d %s:%d-%d", thisPsl->qName, thisPsl->qStart, thisPsl->qEnd, thisPsl->tName, thisPsl->tStart, thisPsl->tEnd ); cgiItem = cgiEncode(thisItem); longXenoPsl1Given(tdb, thisItem, otherOrg, "chromInfo", otherDb, thisPsl, pslTableName ); - sprintf(otherString, "%d&win=T", thisPsl->tStart ); + safef(otherString, sizeof otherString, "%d&win=T", thisPsl->tStart ); hgcAnchorSomewhere( tdb->track, cgiEncode(item), otherString, thisPsl->tName ); printf("View individual alignment windows\n</a>"); printf("<br><br>"); } } else { cartSetString( cart, "win", "F" ); printf("<h3>Alignments Windows </h3>\n" "<b>start stop" " L-score</b><br>" ); while(( pslRow = sqlNextRow(pslSr)) != NULL ) { thisPsl = pslLoad( pslRow+hasBin ); firstAndLastPosition( &thisStart, &thisEnd, thisPsl ); @@ -19993,33 +19998,33 @@ int motifid; hFindSplitTable(database, seqName, tdb->table, table, &hasBin); sqlSafef(query, sizeof query, "select * from %s where name = '%s'", table, item); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { if (firstTime) firstTime = FALSE; else htmlHorizontalLine(); smp = sampleLoad(row+hasBin); sscanf(smp->name,"footPrinter.%d.%d",&offset,&motifid); - sprintf(filename,"../zoo_blanchem/new_raw2_offset%d.fa.main.html?motifID=%d",offset,motifid); + safef(filename, sizeof filename, "../zoo_blanchem/new_raw2_offset%d.fa.main.html?motifID=%d", offset, motifid); - sprintf( tempTableName, "%s_%s", smp->chrom, pslTableName ); + safef(tempTableName, sizeof tempTableName,"%s_%s", smp->chrom, pslTableName ); hFindSplitTable(database, seqName, pslTableName, table, &hasBin); sqlSafef(query, sizeof query, "select * from %s where tName = '%s' and tEnd >= %d and tStart <= %d" , table, smp->chrom, smp->chromStart+smp->samplePosition[0], smp->chromStart+smp->samplePosition[smp->sampleCount-1] ); printf("Content-Type: text/html\n\n<HTML><BODY><SCRIPT>\n"); printf("location.replace('%s')\n",filename); printf("</SCRIPT> <NOSCRIPT> No JavaScript support. " "Click <b><a href=\"%s\">continue</a></b> for " "the requested GenBank report. </NOSCRIPT>\n", filename); } } void humMusClickHandler(struct trackDb *tdb, char *item, @@ -21918,54 +21923,54 @@ sqlSafef(query, sizeof query, "SELECT * FROM %s WHERE " "tName = '%s' AND tStart = %d " "AND tEnd = %d", pslTable, chrom, start, end); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if(row != NULL) { psl = pslLoad(row+hasBin); } else { errAbort("No alignment infomation\n"); } qSeq = loadGenomePart(db, psl->qName, psl->qStart, psl->qEnd); -sprintf(name, "%s in %s(%d-%d)", item,psl->qName, psl->qStart, psl->qEnd); +safef(name, sizeof name, "%s in %s(%d-%d)", item,psl->qName, psl->qStart, psl->qEnd); writeFramesetType(); puts("<HTML>"); printf("<HEAD>\n<TITLE>%s %dk</TITLE>\n</HEAD>\n\n", name, psl->qStart/1000); showSomeAlignment2(psl, qSeq, gftDnaX, psl->qStart, psl->qEnd, name, item, "", psl->qStart, psl->qEnd); } void doPutaFrag(struct trackDb *tdb, char *item) /* display the potential pseudo and coding track */ { struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr = NULL; char **row, table[256], query[256], *parts[6]; struct putaInfo *info = NULL; struct psl *psl = NULL; int start = cartInt(cart, "o"), end = cartInt(cart, "t"); char *db = cgiString("db"); char *name = cartString(cart, "i"), *chr = cartString(cart, "c"); char pslTable[256]; char otherString[256], *tempName = NULL; int partCount; -sprintf(table, "putaInfo"); -sprintf(pslTable,"potentPsl"); +safef(table, sizeof table, "putaInfo"); +safef(pslTable, sizeof pslTable, "potentPsl"); cartWebStart(cart, database, "Putative Coding or Pseudo Fragments"); sqlSafef(query, sizeof query, "SELECT * FROM %s WHERE name = '%s' " "AND chrom = '%s' AND chromStart = %d " "AND chromEnd = %d", table, name, chr, start, end); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if(row != NULL) { info = putaInfoLoad(row+1); } else { @@ -22019,50 +22024,50 @@ /* show genome sequence */ hgcAnchorSomewhere("htcGeneInGenome", cgiEncode(info->name), tdb->track, seqName); printf("View DNA for this putative fragment</A><BR>\n"); /* show the detail alignment */ sqlSafef(query, sizeof query, "SELECT * FROM %s WHERE " "tName = '%s' AND tStart = %d " "AND tEnd = %d AND strand = '%c%c'", pslTable, info->chrom, info->chromStart, info->chromEnd, parts[2][0], info->strand[0]); sr = sqlMustGetResult(conn, query); row = sqlNextRow(sr); if(row != NULL) { psl = pslLoad(row+1); - sprintf(otherString, "&db=%s&pslTable=%s&chrom=%s&cStart=%d&cEnd=%d&strand=%s&qStrand=%s", + safef(otherString, sizeof otherString, "&db=%s&pslTable=%s&chrom=%s&cStart=%d&cEnd=%d&strand=%s&qStrand=%s", database, pslTable, info->chrom,info->chromStart, info->chromEnd, info->strand, parts[2]); hgcAnchorSomewhere("potentPsl", cgiEncode(parts[0]), otherString, info->chrom); printf("<BR>View details of parts of alignment </A>.</BR>\n"); } sqlFreeResult(&sr); putaInfoFree(&info); hFreeConn(&conn); } void doInterPro(struct trackDb *tdb, char *itemName) { char condStr[255]; char *desc; struct sqlConnection *conn; genericHeader(tdb, itemName); conn = hAllocConn(database); -sprintf(condStr, "interProId='%s'", itemName); +sqlSafefFrag(condStr, sizeof condStr, "interProId='%s'", itemName); desc = sqlGetField("proteome", "interProXref", "description", condStr); printf("<B>Item:</B> %s <BR>\n", itemName); printf("<B>Description:</B> %s <BR>\n", desc); printf("<B>Outside Link:</B> "); printf("<A HREF="); printf("http://www.ebi.ac.uk/interpro/DisplayIproEntry?ac=%s", itemName); printf(" Target=_blank> %s </A> <BR>\n", itemName); printTrackHtml(tdb); hFreeConn(&conn); } void doDv(struct trackDb *tdb, char *itemName)