5 //const int BUFFER_BYTES = 16*1024;
\r
6 const int BUFFER_BYTES = 128;
\r
12 if (Pos >= BufferLength) \
\r
14 const int NewBufferLength = BufferLength + BUFFER_BYTES; \
\r
15 char *NewBuffer = new char[NewBufferLength]; \
\r
16 memcpy(NewBuffer, Buffer, BufferLength); \
\r
18 Buffer = NewBuffer; \
\r
19 BufferLength = NewBufferLength; \
\r
21 Buffer[Pos++] = c; \
\r
24 // Get next sequence from file.
\r
25 char *GetFastaSeq(FILE *f, unsigned *ptrSeqLength, char **ptrLabel, bool DeleteGaps)
\r
27 unsigned BufferLength = 0;
\r
35 Quit("Invalid file format, expected '>' to start FASTA label");
\r
41 Quit("End-of-file or input error in FASTA label");
\r
43 // NL or CR terminates label
\r
44 if (NL == c || CR == c)
\r
47 // All other characters added to label
\r
51 // Nul-terminate label
\r
58 int PreviousChar = NL;
\r
67 Quit("Error reading FASTA file, ferror=TRUE feof=FALSE errno=%d %s",
\r
68 errno, strerror(errno));
\r
70 Quit("Error reading FASTA file, fgetc=EOF feof=FALSE ferror=FALSE errno=%d %s",
\r
71 errno, strerror(errno));
\r
76 if (NL == PreviousChar || CR == PreviousChar)
\r
82 Quit("Unexpected '>' in FASTA sequence data");
\r
84 else if (isspace(c))
\r
86 else if (IsGapChar(c))
\r
91 else if (isalpha(c))
\r
96 else if (isprint(c))
\r
98 Warning("Invalid character '%c' in FASTA sequence data, ignored", c);
\r
103 Warning("Invalid byte hex %02x in FASTA sequence data, ignored", (unsigned char) c);
\r
110 return GetFastaSeq(f, ptrSeqLength, ptrLabel, DeleteGaps);
\r
112 *ptrSeqLength = Pos;
\r