static Fastq* fastq_processNextSequence (int freeMemory, int truncateName) { char *line; static Fastq* currFQ = NULL; int count; Seq* currSeq = NULL; if (ls_isEof (lsFastq)) { if (freeMemory) { fastq_freeFastq (currFQ); } return NULL; } count = 0; while ( (line=ls_nextLine (lsFastq)) && (count<4) ) { if (line[0] == '\0') { continue; } if (line[0] == '@') { if (freeMemory) { fastq_freeFastq (currFQ); } count++; AllocVar (currFQ); AllocVar (currFQ->seq); currSeq = currFQ->seq; currSeq->name = hlr_strdup (line + 1); if (truncateName) { currSeq->name = firstWordInLine (skipLeadingSpaces (currSeq->name)); } line = ls_nextLine (lsFastq); // reading sequence currSeq->sequence = hlr_strdup ( line ); currSeq->size = strlen (currSeq->sequence); count++; line = ls_nextLine (lsFastq); // reading quality ID if( line[0] != '+' ) die("Expected quality ID: '+' or '+%s'", currSeq->name ); count++; line = ls_nextLine (lsFastq); // reading quality currFQ->quality = hlr_strdup( line ); count++; } } ls_back (lsFastq,1); return currFQ; }
/** * Get the next BlastQuery. * @pre The module has been initialized using blastParser_init(). */ BlastQuery* blastParser_nextQuery (void) { char *line,*pos; static char *queryName = NULL; static char *prevBlastQueryName = NULL; static BlastQuery *currBlastQuery = NULL; int first; if (!ls_isEof (ls)) { blastParser_freeQuery (currBlastQuery); currBlastQuery = NULL; AllocVar (currBlastQuery); currBlastQuery->entries = arrayCreate (5,BlastEntry); first = 1; while (line = ls_nextLine (ls)) { if (line[0] == '\0') { continue; } pos = strchr (line,'\t'); *pos = '\0'; strReplace (&queryName,line); if (first == 1 || strEqual (prevBlastQueryName,queryName)) { blastParser_processLine (pos + 1,currBlastQuery); } else { ls_back (ls,1); return currBlastQuery; } if (first == 1) { currBlastQuery->qName = hlr_strdup (queryName); first = 0; } strReplace(&prevBlastQueryName,queryName); } if (first == 1) { return NULL; } else { return currBlastQuery; } } blastParser_freeQuery (currBlastQuery); currBlastQuery = NULL; return NULL; }
ls_node_t* ls_pushback(ls_node_t* list, Ptr data) { ls_node_t* result = 0; ls_node_t* tmp = 0; assert(list); result = ls_create_node(data); tmp = ls_back(list); if(!tmp) { tmp = list; } tmp->next = result; result->prev = tmp; list->prev = result; return result; }
Ptr ls_popback(ls_node_t* list) { Ptr result = 0; ls_node_t* tmp = 0; assert(list); tmp = ls_back(list); if(tmp) { result = tmp->data; if(list != tmp->prev) { list->prev = tmp->prev; } else { list->prev = 0; } tmp->prev->next = 0; safe_free(tmp); } return result; }