2817c6f81dd844b54f6232d688c001e6a12f9ebb hiram Wed Feb 13 11:17:54 2019 -0800 beginning to partition the code out to files refs #18869 diff --git src/hg/hubApi/getData.c src/hg/hubApi/getData.c new file mode 100644 index 0000000..ead339d --- /dev/null +++ src/hg/hubApi/getData.c @@ -0,0 +1,55 @@ +/* manage endpoint /getData/ functions */ + +#include "dataApi.h" + +void getTrackData() +/* return data from a track */ +{ +} + +void getSequenceData() +/* return DNA sequence, given at least a db=name and chrom=chr, + optionally start and end */ +{ +char *db = cgiOptionalString("db"); +char *chrom = cgiOptionalString("chrom"); +char *start = cgiOptionalString("start"); +char *end = cgiOptionalString("end"); + +if (isEmpty(db)) + jsonErrAbort("missing URL db=<ucscDb> name for endpoint '/getData/sequence"); +if (isEmpty(chrom)) + jsonErrAbort("missing URL chrom=<name> for endpoint '/getData/sequence?db=%s", db); +if (chromSeqFileExists(db, chrom)) + { + struct chromInfo *ci = hGetChromInfo(db, chrom); + struct dnaSeq *seq = NULL; + if (isEmpty(start) || isEmpty(end)) + seq = hChromSeqMixed(db, chrom, 0, 0); + else + seq = hChromSeqMixed(db, chrom, sqlSigned(start), sqlSigned(end)); + if (NULL == seq) + jsonErrAbort("can not find sequence for chrom=%s for endpoint '/getData/sequence?db=%s&chrom=%s", chrom, db, chrom); + struct jsonWrite *jw = jsonStartOutput(); + jsonWriteString(jw, "db", db); + jsonWriteString(jw, "chrom", chrom); + if (isEmpty(start) || isEmpty(end)) + { + jsonWriteNumber(jw, "start", (long long)0); + jsonWriteNumber(jw, "end", (long long)ci->size); + } + else + { + jsonWriteNumber(jw, "start", (long long)sqlSigned(start)); + jsonWriteNumber(jw, "end", (long long)sqlSigned(end)); + } + jsonWriteString(jw, "dna", seq->dna); + jsonWriteObjectEnd(jw); + fputs(jw->dy->string,stdout); + freeDnaSeq(&seq); + } +else + jsonErrAbort("can not find specified chrom=%s in sequence for endpoint '/getData/sequence?db=%s&chrom=%s", chrom, db, chrom); +} + +