Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / fasta.cpp
diff --git a/website/archive/binaries/mac/src/muscle/fasta.cpp b/website/archive/binaries/mac/src/muscle/fasta.cpp
new file mode 100644 (file)
index 0000000..0eee1c5
--- /dev/null
@@ -0,0 +1,56 @@
+#include "muscle.h"\r
+#include <stdio.h>\r
+#include <ctype.h>\r
+#include "msa.h"\r
+#include "textfile.h"\r
+\r
+const unsigned FASTA_BLOCK = 60;\r
+\r
+void MSA::FromFASTAFile(TextFile &File)\r
+       {\r
+       Clear();\r
+\r
+       FILE *f = File.GetStdioFile();\r
+       \r
+       unsigned uSeqCount = 0;\r
+       unsigned uColCount = uInsane;\r
+       for (;;)\r
+               {\r
+               char *Label;\r
+               unsigned uSeqLength;\r
+               char *SeqData = GetFastaSeq(f, &uSeqLength, &Label, false);\r
+               if (0 == SeqData)\r
+                       break;\r
+               AppendSeq(SeqData, uSeqLength, Label);\r
+               }\r
+       }\r
+\r
+void MSA::ToFASTAFile(TextFile &File) const\r
+       {\r
+       const unsigned uColCount = GetColCount();\r
+       assert(uColCount > 0);\r
+       const unsigned uLinesPerSeq = (GetColCount() - 1)/FASTA_BLOCK + 1;\r
+       const unsigned uSeqCount = GetSeqCount();\r
+\r
+       for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)\r
+               {\r
+               File.PutString(">");\r
+               File.PutString(GetSeqName(uSeqIndex));\r
+               File.PutString("\n");\r
+\r
+               unsigned n = 0;\r
+               for (unsigned uLine = 0; uLine < uLinesPerSeq; ++uLine)\r
+                       {\r
+                       unsigned uLetters = uColCount - uLine*FASTA_BLOCK;\r
+                       if (uLetters > FASTA_BLOCK)\r
+                               uLetters = FASTA_BLOCK;\r
+                       for (unsigned i = 0; i < uLetters; ++i)\r
+                               {\r
+                               char c = GetChar(uSeqIndex, n);\r
+                               File.PutChar(c);\r
+                               ++n;\r
+                               }\r
+                       File.PutChar('\n');\r
+                       }\r
+               }\r
+       }\r