+++ /dev/null
-#include "muscle.h"\r
-#include "msa.h"\r
-#include "textfile.h"\r
-\r
-const int BLOCKSIZE = 60;\r
-\r
-static char FixChar(char c)\r
- {\r
- switch (c)\r
- {\r
- case '(':\r
- case ')':\r
- case '[':\r
- case ']':\r
- case ':':\r
- case ';':\r
- case ',':\r
- return '_';\r
- }\r
- if (!isprint(c))\r
- return '_';\r
- return c;\r
- }\r
-\r
-static void FixName(char Name[])\r
- {\r
- while (char c = *Name)\r
- *Name++ = FixChar(c);\r
- }\r
-\r
-void MSA::ToPhySequentialFile(TextFile &File) const\r
- {\r
- const unsigned SeqCount = GetSeqCount();\r
- const unsigned ColCount = GetColCount();\r
-\r
- File.PutFormat("%d %d\n", SeqCount, ColCount);\r
-\r
- if (0 == ColCount)\r
- return;\r
-\r
- for (unsigned Seq = 0; Seq < SeqCount; ++Seq)\r
- {\r
- char Name[11];\r
- const char *ptrName = GetSeqName(Seq);\r
- size_t n = strlen(ptrName);\r
- if (n > 10)\r
- n = 10;\r
- memcpy(Name, ptrName, n);\r
- Name[n] = 0;\r
- FixName(Name);\r
- File.PutFormat("%-10.10s", Name);\r
-\r
- int BlockIndex = 0;\r
- int Col = 0;\r
- for (;;)\r
- {\r
- const unsigned MaxCols = (BlockIndex == 0) ? (BLOCKSIZE - 10) : BLOCKSIZE;\r
- for (unsigned ColsThisBlock = 0; ColsThisBlock < MaxCols; ++ColsThisBlock)\r
- {\r
- if (Col == ColCount)\r
- break;\r
- if (ColsThisBlock%10 == 0 && (BlockIndex == 0 || ColsThisBlock > 0))\r
- File.PutChar(' ');\r
- char c = GetChar(Seq, Col);\r
- if (isalpha(c))\r
- c = toupper(c);\r
- File.PutChar(c);\r
- ++Col;\r
- }\r
- File.PutChar('\n');\r
- if (Col == ColCount)\r
- break;\r
- ++BlockIndex;\r
- }\r
- }\r
- }\r
-\r
-void MSA::ToPhyInterleavedFile(TextFile &File) const\r
- {\r
- const unsigned SeqCount = GetSeqCount();\r
- const unsigned ColCount = GetColCount();\r
-\r
- File.PutFormat("%d %d\n", SeqCount, ColCount);\r
-\r
- if (0 == ColCount)\r
- return;\r
-\r
- int Col = 0;\r
- for (;;)\r
- {\r
- const unsigned ColBlockStart = Col;\r
- const unsigned MaxCols = (ColBlockStart == 0) ? (BLOCKSIZE - 10) : BLOCKSIZE;\r
-\r
- for (unsigned Seq = 0; Seq < SeqCount; ++Seq)\r
- {\r
- if (0 == ColBlockStart)\r
- {\r
- char Name[11];\r
- const char *ptrName = GetSeqName(Seq);\r
- size_t n = strlen(ptrName);\r
- if (n > 10)\r
- n = 10;\r
- memcpy(Name, ptrName, n);\r
- Name[n] = 0;\r
- FixName(Name);\r
- File.PutFormat("%-10.10s", Name);\r
- }\r
-\r
- Col = ColBlockStart;\r
- for (unsigned ColsThisBlock = 0; ColsThisBlock < MaxCols; ++ColsThisBlock)\r
- {\r
- if (Col == ColCount)\r
- break;\r
- if (ColsThisBlock%10 == 0 && (0 == ColBlockStart || ColsThisBlock > 0))\r
- File.PutChar(' ');\r
- char c = GetChar(Seq, Col);\r
- if (isalpha(c))\r
- c = toupper(c);\r
- File.PutChar(c);\r
- ++Col;\r
- }\r
- File.PutChar('\n');\r
- }\r
- if (Col == ColCount)\r
- break;\r
- File.PutChar('\n');\r
- }\r
- }\r