6082fe6467f1b6632e73ee985b024595f256f354 kent Wed May 28 14:49:39 2014 -0700 Librarified fq i/o diff --git src/lib/fq.c src/lib/fq.c new file mode 100644 index 0000000..994dab7 --- /dev/null +++ src/lib/fq.c @@ -0,0 +1,57 @@ +/* fq - stuff for doing i/o on fastq files. */ + +/* Copyright (C) 2014 The Regents of the University of California + * See README in this or parent directory for licensing information. */ + +#include "common.h" +#include "linefile.h" +#include "fq.h" + +struct fq *fqReadNext(struct lineFile *lf) +/* Read next record, return it as fq. */ +{ +struct fq *fq; +AllocVar(fq); +char *line; + +/* Deal with initial line starting with '@' */ +if (!lineFileNextReal(lf, &line)) + return FALSE; +if (line[0] != '@') + { + errAbort("Expecting line starting with '@' got %s line %d of %s", + line, lf->lineIx, lf->fileName); + } +fq->header = cloneString(line); + +/* Deal with line containing sequence. */ +if (!lineFileNext(lf, &line, NULL)) + errAbort("%s truncated in middle of record", lf->fileName); +fq->dna = cloneString(line); + +/* Check for + line */ +if (!lineFileNext(lf, &line, NULL)) + errAbort("%s truncated in middle of record", lf->fileName); +if (line[0] != '+') + errAbort("Expecting + line %d of %s", lf->lineIx, lf->fileName); + +/* Get quality line */ +if (!lineFileNext(lf, &line, NULL)) + errAbort("%s truncated in middle of record", lf->fileName); +fq->quality = cloneString(line); +return fq; +} + +void fqFree(struct fq **pFq) +/* Free up *pFq and set it to NULL */ +{ +struct fq *fq = *pFq; +if (fq != NULL) + { + freeMem(fq->header); + freeMem(fq->dna); + freeMem(fq->quality); + freez(pFq); + } +} +